Eu tenho um modelo:
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;
}
}
E aqui está o controlador que carrega a visualização:
//
// GET: /Admin/AddNewUser
public ActionResult AddNewUser()
{
DbUserRoles Roles = new DbUserRoles();
return View(Roles.GetRoles());
}
Posso exibir os itens da lista usando um @foreach
loop, como mostrado abaixo:
@foreach (var item in Model)
{
<tr>
<td>
@item.UserRoleId
</td>
<td>
@item.UserRole
</td>
</tr>
}
Mas como preencho uma lista suspensa com o modelo que é passado, tentei
@Html.DropDownListFor(x => x.UserRole)
mas não estou tendo sorte.
var roles = dbUserRoles.GetRoles() ...
quando oGetRoles
método está localizado no controlador, enquantodbUserRoles
é uma instância da classe model?fonte
using System.Linq;
para obter o método de extensão Select.Uma maneira pode ser;
fonte
Algo próximo a:
Você precisa de um SelectList para preencher o DropDownListFor. Para qualquer atributo HTML necessário, você pode adicionar:
fonte
Em vez de a
List<UserRole>
, você pode deixar seu Modelo conter aSelectList<UserRole>
. Adicione também uma propriedadeSelectedUserRoleId
para armazenar ... bem ... o valor de ID da função de usuário selecionado.Preencha o SelectList e, em seu modo de exibição, use:
e você deve ficar bem.
Consulte também http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.108).aspx .
fonte
Sua ligação para
DropDownListFor
precisa de mais alguns parâmetros para aprimorá-la. Você precisa de um SelectList como na seguinte pergunta do SO:MVC3 DropDownListFor - um exemplo simples?
Com o que você tem lá, você apenas disse onde armazenar os dados, e não de onde carregar a lista.
fonte
fonte
Vou abordar isso como se você tivesse um modelo de usuários:
Users.cs
e um modelo DbUserRoles que representava uma tabela com esse nome no banco de dados:
DbUserRoles.cs
Depois de fazer a limpeza, você poderá criar e preencher uma coleção de UserRoles, assim, no seu Controller:
e tem estas funções de suporte:
Repository.cs
Função Meu Repositório
GetAllUserRoles()
para a função, acima:AddNewUser.cshtml
Em seguida, faça isso na sua Visualização:
fonte
fonte
EmployeeViewModel
eEmployee
, no entanto, mostrar os objetos lá e seus tipos.