1

次のcshtmlフォームがあります

@using (Html.BeginForm(Html.BeginForm("Create", "UserRole", Model, FormMethod.Post)))
{
   @Html.AntiForgeryToken()
   @Html.ValidationSummary(true)

   <fieldset>
       <legend>Role</legend>

       <div class="editor-label">
           @Html.Label(Model.User.UserName)
       </div>
       <div class="editor-field">
           @Html.CheckBoxList(Model.CheckboxList)
       </div>

       <p>
           <input type="submit" value="Create" />
       </p>
   </fieldset>
}

そして、アクションで Model.CheckboxList の選択された項目を取得したいと考えています。

コントローラーに次の作成アクションがあります

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(UserRoleViewModel userRoleViewModel)
    {
        if (ModelState.IsValid)
        {
            //_context.Role.Add(role);
            //_context.SaveChanges();
            //return RedirectToAction("Index");
        }

        return View(viewModel);
    }

ただし、viewModel.CheckboxList は 0 です。

チェックボックスリストの選択された値と Model.User をコントローラーアクションに渡すにはどうすればよいですか?

私のViewModelは次のようになります:-

    public User User { get; set; }
    public IEnumerable<Role> RoleList { get; set; }

    public List<UserRoleViewModel> UserList { get; set; }

    public IEnumerable<SelectListItem> CheckboxList { get; set; }

    public UserRoleViewModel()
    {
    }

    public UserRoleViewModel(User user, IEnumerable<Role> roleList )
    {
        User = user;
        RoleList = roleList;
    }

あなたの助けと時間をありがとう!

更新 ----------- この投稿を読んだ後、ここにリンクの説明を入力して、例に従うようにコードを調整しようとしましたが、この更新されたコードにはまだ問題があります。

今、私は次のものを持っています:-

cshtml :-

@model IEnumerable<MvcMembership.ViewModels.RoleCheckboxListViewModel>

    @using (Html.BeginForm())
    {
        @Html.EditorForModel()
        <input type="submit" value="OK" />
    }

ビュー/ロール/EditorTemplates/RoleCheckboxListViewModel.cshtml

@model MvcMembership.ViewModels.RoleCheckboxListViewModel
@Html.HiddenFor(x => x.RoleId)
@Html.HiddenFor(x => x.RoleName)
<div>
   @Html.CheckBoxFor(x => x.Checked)
   @Html.LabelFor(x => x.Checked, Model.RoleName)
</div>

ビューモデル:-

public class RoleCheckboxListViewModel
{
    public string RoleId { get; set; }
    public string RoleName { get; set; }
    public bool Checked { get; set; }
}

コントローラのアクションは次のとおりです:-

        public ActionResult Create(int? uid)
    {
        var checkBoxList = new[]
        {
            new RoleCheckboxListViewModel() { 
                    RoleId = "1", Checked = true, RoleName = "item 1"  },
            new RoleCheckboxListViewModel() { 
                    RoleId = "2", Checked = true, RoleName = "item 2" },
            new RoleCheckboxListViewModel() { 
                    RoleId = "3", Checked = true, RoleName = "item 3" },
        };

        return View(checkBoxList);
    }

私が今抱えている問題は、Create.cshtml の問題です。チェックボックスリストが表示されず、123 個と [OK] ボタンのみが表示されます。

私は現在行き止まりにいるので、どんな助けでも大歓迎です。

4

2 に答える 2