我有一个partialView,其<select>
包含正在注册的用户的可用角色列表。我是MVC的新手,我正在努力弄清楚如何绑定<select>
。
通常我会在ascx的Page_Load
上执行此操作,例如:
rolesSelect.DataSource = Roles.GetAllRoles().OrderBy(r => r);
rolesSelect.DataBind();
但是对于MVC来说,它完全不同。我的视图和partialView看起来像这样:
Users.cshtml
@model IEnumerable<RobotDog.Models.UserModel>
<table>...</table>
<div id="addUser">
@Html.RenderPartial("_AddUser")
</div>
_AddUser.cshtml
@model RobotDog.Models.RegisterModel
@using(Html.BeginForm("AddUser","Admin", FormMethod.Post)) {
@Html.EditorFor(x => x.Email, new { @class = "input-xlarge", @placeholder = "Email"})
@Html.EditorFor(x => x.UserName, new { @class = "input-xlarge", @placeholder = "User Name"})
@Html.EditorFor(x => x.Password, new { @class = "input-xlarge", @placeholder = "Password"})
@Html.DropDownListFor(????) //not sure how to bind this?
}
我的问题是:
答案 0 :(得分:2)
将Roles
集合添加到模型中,并根据需要构建选择列表。
@Html.DropDownListFor(x => x.Role,
Model.Roles.Select(role =>
new SelectListItem() { Text = role.Name, Value = role.Value }
)
)
将Roles
添加到模型的替代方法是创建HTML Helper方法。这是一个扩展方法,所以像这样添加:
namespace ExtensionMethods
{
public static class HtmlHelperExtensions
{
public static IEnumerable<SelectListItem> GetRoles(this HtmlHelper helper)
{
return new[] {
new SelectListItem() { Text="Role1" },
new SelectListItem() { Text="Role2" },
};
}
}
}
然后在Web.Config
文件夹下的Views
注册命名空间:
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="ExtensionMethods"/>
</namespaces>
</pages>
</system.web.webPages.razor>
现在您可以创建下拉列表:
@Html.DropDownListFor(x => x.Role, Html.GetRoles())