1

<select>登録されているユーザーが使用できるロールのリストを保持するpartialView があります。私はMVCが初めてで、<select>.

通常Page_Load、ascx でこれを行います。たとえば、次のようになります。

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

しかし、MVC の場合はまったく異なります。私のビューと 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 ヘルパー メソッドを作成することもできます。これは拡張メソッドなので、次のように追加します。

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 に答える