6

これが私の見解です。CheckboxFor() の使用方法:

@using eMCViewModels;
@model eMCViewModels.RolesViewModel
@{
    ViewBag.Title = "CreateNew";
}
<h2>
    CreateNew<
/h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>RolesViewModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div>
            @foreach (RoleAccessViewModel mnu in Model.RoleAccess)
            {
                 // How to use checkboxfor here?
            }
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Model.RoleAccessは でありList<RoleAccessViewModel>、 を使用してチェックボックスを作成したい@Html.CheckBoxFor()

これは私のRoleAccessViewModel

public class RoleAccessViewModel
{
    public int RoleID { get; set; }
    public string RoleName { get; set; }
    public int MenuID { get; set; }
    public string MenuDisplayName { get; set; }
    public string MenuDiscription { get; set; }
    public string IsEnabled { get; set; } // changed to bool
}

リストに 5 つの項目があるとすると、ID=menuID と Text=menuDisplayName の 5 つのチェックボックスが必要です。どうすればこれを達成できますか?

編集

私の試み

@Html.CheckBoxFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID).IsEnabled )
@Html.LabelFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID ).MenuDisplayName ) 

しかし、タイプをIsEnabledからstringに変更した後bool。チェックボックスが機能します。ただし、 LabelMenuDisplayNameは values の代わりにのみ印刷されます。誰でも助けることができますか?

4

4 に答える 4

17

もし私が正しく理解できなかったら、あなたはこれを意味しますか?ブールIsEnabled型にする必要があります

モデル

public class RoleAccessViewModel
{
    public int RoleID { get; set; }
    public string RoleName { get; set; }
    public int MenuID { get; set; }
    public string MenuDisplayName { get; set; }
    public string MenuDiscription { get; set; }
    public bool IsEnabled { get; set; }
}

見る

@foreach (RoleAccessViewModel mnu in Model.RoleAccess)
{
    @Html.CheckBoxFor(m => mnu.IsEnabled )
}
于 2012-07-25T15:01:05.263 に答える
10

foreachをforに変更します

@for(int i = 0; i < Model.RoleAccess.Count; i++)
{
    Html.CheckBoxFor(Model.RoleAccess[i].IsEnabled, new { id = Model.RoleAccess[i].MenuID });
    Html.DisplayFor(Model.RoleAccess[i].MenuDisplayName); // or just Model.RoleAccess[i].MenuDisplayName
}
于 2012-07-25T15:05:53.433 に答える
9

CheckBoxForブールプロパティでのみ機能します。したがって、最初に行う必要があるのは、レコードが選択されたかどうかを示すブールプロパティを含めるために、ビューモデルを変更することです。

public class RoleAccessViewModel
{
    public int RoleID { get; set; }
    public string RoleName { get; set; }
    public int MenuID { get; set; }
    public string MenuDisplayName { get; set; }
    public string MenuDiscription { get; set; }
    public bool IsEnabled { get; set; }
}

foreach次に、ループをエディターテンプレートに置き換えることをお勧めします。

<div>
    @Html.EditorFor(x => x.RoleAccess)
</div>

最後に、RolesAccessコレクションの各要素に対して自動的にレンダリングされる対応するエディターテンプレートを記述します(~/Views/Shared/EditorTemplates/RoleAccessViewModel.cshtml):

@model RoleAccessViewModel
@Html.HiddenFor(x => x.RoleID)
... might want to include additional hidden fields
... for the other properties that you want to be bound back

@Html.LabelFor(x => x.IsEnabled, Model.RoleName)
@Html.CheckBoxFor(x => x.IsEnabled)
于 2012-07-25T15:08:15.327 に答える