lista rozwijana w projekcie mvc

0

Witam,

Jako początkujący mam zapewne banalny dla Was problem.
Wprowadzam dane do tabeli magazyn w bazie danych. Jednym z pól jest osoba - (tabela osoba: Id, imię, nazwisko, imię ojca) - lista rozwijana). Teraz po rozwinięciu listy rozwijanej ładuje mi się tylko imię osoby. Niestety potrzebuję aby w liście rozwijanej pojawiło się imię i nazwisko osoby. Czy powinienem zmodyfikować kontroler czy widok?

Pozdrawiam

0

W miejscu gdzie zasilasz wartościami listy nie możesz złączyć imię + nazwisko z modelu? Coś na wzór: https://nimblegecko.com/using-simple-drop-down-lists-in-ASP-NET-MVC/ (metoda : GetAllStates)

0

No właśnie nie wiem czy o to chodzi.
W tej chwili rozwijam listę. Dane z listy są zaciągane z tabeli Osoba. Mam tylko nazwisko. Jeżeli mam dwóch Nowaków to potrzebuję dodatkowo wyświetlić imię.
Nie wiem jak złączyć pole Imię i pole Nazwisko.

Pozdrawiam

0

Zależy jak przekazujesz dane do widoku - jeżeli są to bezpośrednie elementy z bazy danych, to możesz to zmienić w widoku, ręcznie zbudować element <select> z takimi wartościami jak ci potrzeba.

0

Tak w tej chwili wygląda widok, (create.cshtml.) gdzie m.in. dodaję z listy rozwijanej nową osobę. Rozwija mi się tylko nazwisko.

 <div class="form-group">
            @Html.LabelFor(model => model.IdOsoby, "IdOsoby", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("IdOsoby", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.IdOsoby, "", new { @class = "text-danger" })
            </div>
        </div>
0

Jako drugi parametr Html.DropDownList możesz przekazać własną listę zawierającą wartości (to, co leci do serwera) i nazwy (to, co się wyświetla). Vide https://stackoverflow.com/a/22408593.

Nie widzę w jaki sposób przekazujesz z kontrolera do widoku listę wszystkich możliwych osób, ale uznałem, że nazywa się to Osoby i zawiera Imie oraz Nazwisko. Wtedy tworzenie twojego DropDown prawdopodobnie powinno wyglądać jakoś tak:

@Html.DropDownList("IdOsoby", new SelectList(model.Osoby.Select(x => new SelectListItem { Name = $"{x.Imie} {x.Nazwisko}", Value = x.OsobyId)), htmlAttributes: new { @class = "form-control" })

Jak to działa? Bierze listę wszystkich osób, następnie przerabia ją na listę elementów typu SelectListItem, takich że Name to "Imie Nazwisko", a value to Id, z czego przerabia to finalnie na klasę SelectList, tak jak trzeba,

Powinno ci to zbudować element <select> mniej więcej takiej postaci:

<select>
<option value="1">Jan Kowalski</option>
</select>

Nie testowałem.

0

Tu chyba ten kod będzie miał zastosowanie:

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))

A tu Controller:

// GET: Magazyn
        public ActionResult Index()
        {
            var magazyn = db.Magazyn.Include(m => m.Wyposażenie).Include(m => m.Osoba);
            return View(magazyn.ToList());
        }

        // GET: Magazyn/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Magazyn magazyn = db.Magazyn.Find(id);
            if (magazyn == null)
            {
                return HttpNotFound();
            }
            return View(magazyn);
        }

        // GET: Magazyn/Create
        public ActionResult Create()
        {
            ViewBag.IdWyposażenia = new SelectList(db.Wyposażenie, "Id", "Rodzaj");
            ViewBag.IdOsoby = new SelectList(db.Osoba, "Id", "Imię",  "Nazwisko");
            return View();
        }
0

Ale tak niestety nie działa...

1 użytkowników online, w tym zalogowanych: 0, gości: 1