Mam modelkę:
public class DbUserRole
{
public int UserRoleId { get; set; }
public string UserRole { get; set; }
}
public class DbUserRoles
{
public List<DbUserRole> GetRoles()
{
BugnetReports RoleDropDown = new BugnetReports();
List<DbUserRole> Roles = new List<DbUserRole>();
DataSet table = RoleDropDown.userRoleDropDown();
foreach (DataRow item in table.Tables[0].Rows)
{
DbUserRole ur = new DbUserRole();
ur.UserRole = Convert.ToString(item["UserRoleName"]);
ur.UserRoleId = Convert.ToInt32(item["UserRoleID"]);
Roles.Add(ur);
}
return Roles;
}
}
A oto kontroler, który ładuje widok:
//
// GET: /Admin/AddNewUser
public ActionResult AddNewUser()
{
DbUserRoles Roles = new DbUserRoles();
return View(Roles.GetRoles());
}
Mogę wyświetlić elementy z listy za pomocą @foreach
pętli, jak pokazano poniżej:
@foreach (var item in Model)
{
<tr>
<td>
@item.UserRoleId
</td>
<td>
@item.UserRole
</td>
</tr>
}
Ale jak zapełnić listę rozwijaną modelem, który jest przekazywany, próbowałem
@Html.DropDownListFor(x => x.UserRole)
ale nie mam szczęścia.
var roles = dbUserRoles.GetRoles() ...
gdyGetRoles
metoda znajduje się w kontrolerze, podczas gdydbUserRoles
jest instancją klasy modelu?źródło
using System.Linq;
aby uzyskać metodę rozszerzenia Select.Jeden sposób może być;
źródło
Coś bliskiego:
Potrzebujesz SelectList, aby wypełnić DropDownListFor. Do dowolnych potrzebnych atrybutów HTML możesz dodać:
źródło
Zamiast a
List<UserRole>
, możesz pozwolić, aby Twój Model zawierał plikSelectList<UserRole>
. Dodaj również właściwośćSelectedUserRoleId
do przechowywania ... cóż ... wybranej wartości identyfikatora roli użytkownika.Wypełnij SelectList, a następnie w swoim widoku użyj:
i powinno być dobrze.
Zobacz także http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx .
źródło
Twój telefon do
DropDownListFor
potrzebuje jeszcze kilku parametrów, aby to urzeczywistnić. Potrzebujesz SelectList, jak w następującym pytaniu SO:MVC3 DropDownListFor - prosty przykład?
Mając to, co tam masz, powiedziałeś mu tylko, gdzie przechowywać dane, a nie skąd załadować listę.
źródło
źródło
Podejdę do tego tak, jakbyś miał model użytkowników:
Users.cs
oraz model DbUserRoles, który reprezentował tabelę o tej nazwie w bazie danych:
DbUserRoles.cs
Po wyczyszczeniu tego, powinieneś być w stanie utworzyć i wypełnić kolekcję ról użytkowników, taką jak ta, w swoim kontrolerze:
i mają następujące funkcje pomocnicze:
Repository.cs
Funkcja Moje repozytorium
GetAllUserRoles()
dla funkcji, powyżej:AddNewUser.cshtml
Następnie zrób to w swoim widoku:
źródło
źródło
EmployeeViewModel
iEmployee
pokazać znajdujące się tam obiekty i ich typy.