/ / Zamiana pola tekstowego formularza na listę rozwijaną - asp.net-mvc, menu rozwijane

Zastępowanie pola tekstowego formularza rozwijaną listą - menu rozwijane asp.net-mvc

Stworzyłem prostą aplikację internetową Zadania za pomocą .NET 4.0 MVC & Entity Framework. Pobieranie danych z bazy danych. Mam stoły:

Staff {PkId, FirstName, LastName}
Tasks {PkId, Task, TaskDescription, DueDate}
TasksAssigned {PkId, StaffId, TaskId}

Kiedy przejdę do edycji zadań Przypisany rekord (edycja strony) dostanę formularz (pozbawiony div / css dla spacji)

@Html.LabelFor(model => model.PkId)
@Html.EditorFor(model => model.PkId)

@Html.LabelFor(model => model.StaffId)
@Html.EditorFor(model => model.StaffId)

@Html.LabelFor(model => model.TaskId)
@Html.EditorFor(model => model.TaskId)

Ale muszę wyświetlić Zadanie zamiast TaskId iNazwisko zamiast StaffId. Potrzebuję rozwijanych list w polu tekstowym zamiast wszystkich nazw i wszystkich dostępnych zadań, aby móc wybrać inną osobę lub inne zadanie (lub jedno i drugie).

Zakładam, że powinienem użyć DropDownList () lub DropDownListFor ()?

Dzięki za pomoc.

(dodatek) Pozwól mi spróbować wyjaśnić lepiej ... Powiedzmy, że są członkowie personelu:

{ 12, "John", "Dow" },
{ 15, "Bill", "Smith" }.

Powiedzmy, że jest zadanie

{ 3, "Clean the printer", "Call company to clean the printer... ", "2016-06-25" }.

Więc w TaskAssigned będzie zapis

{ 8, 12, 3 }

Dobrze?

Zmieńmy rekord, aby zadanie zostało przypisane do Billa zamiast Johna. Więc chciałbym kliknąć "Edytować" i na stronie Edycja miałbym formularz z dwoma polami tekstowymi ([i] reprezentują pole tekstowe formularza)

Personel: John Dow Zadanie: Wyczyść drukarkę

Aby to zmienić, muszę zastąpić nazwę 15,Identyfikator Billa, prawda? Chciałbym mieć listę rozwijaną z nazwiskami Johna i Billa, a następnie wybrać imię Billa, a po przesłaniu identyfikator Billa zostanie zapisany w tabeli TasksAssigned.

Odpowiedzi:

1 dla odpowiedzi № 1

Zakładam, że obejmujesz pozostałe dwatabele, gdy dzwonisz po swoje dane. Jeśli tak, z łatwością powinieneś wyświetlić pola, których potrzebujesz, z odniesieniem do odpowiednich. Czysto w oparciu o to, co jest w pytaniu, powinno to wyglądać mniej więcej tak:

@Html.HiddenFor(model => model.TaskId)

@Html.LabelFor(model => model.Tasks.Task)
@Html.EditorFor(model => model.Tasks.Task)

@Html.LabelFor(model => model.Staff.LastName)
@Html.EditorFor(model => model.Staff.LastName)

Nie widzę natychmiastowej potrzeby pokazywania, a nawet dawania opcji edycji wartości PK wpisu TaskAssigned. Właśnie dlatego przeniosłem ją do Ukrytego

Jeśli chcesz dać użytkownikom listę rozwijanąmusisz upewnić się, że przesyłasz potencjalne opcje wraz ze swoim modelem. W takim przypadku najlepiej będzie użyć ViewModel do wysyłania wyborów.

W ten sposób będziesz mógł zrobić coś takiego jak poniżej.

List<SelectListItem> listOfStaff = new List<SelectListItem>();
listOfStaff.Add(new SelectListItem
{
Text = "Mark",
Value = "1"
});
listOfStaff.Add(new SelectListItem
{
Text = "John",
Value = "2",
Selected = true
});

Prowadzi cię do DropDownList, o którym już wspomniałeś w swoim pytaniu.

@Html.DropDownListFor(model => model.StaffId, model.listOfStaff, "-- Select Staffmember --")

Mam nadzieję, że pomoże Ci to nieco bardziej w kierunku działającego rozwiązania.