1

我有一个 partialView,<select>其中包含一个用于注册用户的可用角色列表。我是 MVC 的新手,我正在努力弄清楚如何绑定<select>.

通常我会在Page_Loadascx 上执行此操作,例如:

rolesSelect.DataSource = Roles.GetAllRoles().OrderBy(r => r);
rolesSelect.DataBind();

但是使用 MVC 就完全不同了。我的 view 和 partialView 看起来像这样:

用户.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?
}

我的问题是:

  1. 我需要将适当的集合从控制器传递到视图到 partialView 还是有更实用的可扩展方法?
  2. 是否可以为 partialView 提供一个控制器,这样我只需要担心将 partialView 添加到视图而不是视图的控制器吗?
  3. 这真的归结为将数据集合绑定到 PartialView 中的 DropDownList 的标准做法是什么?
4

1 回答 1

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())
于 2012-08-31T02:33:37.670 回答