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 № 1Zakł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.