4

だから私の問題はこのようになります、

私は2つのリストを持っています

リストAにはが含まれています。

  1. アイテム1
  2. アイテム2
  3. アイテム3
  4. アイテム4
  5. アイテム5

そしてリストBは含まれています

  1. アイテム1
  2. アイテム2
  3. アイテム3
  4. アイテム4
  5. ....。
  6. ...。
  7. アイテム10

私がやりたいのは、MVC Razor ViewでBのすべてのアイテムのチェックボックスを動的に生成することです。これらのチェックボックスのうち、Aのすべてのアイテムのすべてのチェックボックスをチェック(選択)します。Aは常にBのサブセットになるためです。

次に、ユーザーはチェックボックスをオンまたはオフにして、保存のためにそれらの値をコントローラーに渡すことができます。リストAは、ユーザーが選択した新しい値で更新されます。

ヘルプはありますか?

更新1: Model.CheckboxSelectionsのすべてのアイテムを表示できます。部分ビューは使いたくない。私は次のようなことを試みていますが、まだ何かが欠けています。

         @for (int i = 0; i < Model.CheckboxSelections.Count; i++)
        {
@Html.CheckBox(Model.CheckboxSelections[i].Sku.ToString(), Model.CheckboxSelections[i].IsChecked.ToString())
     }
4

1 に答える 1

12

私は自分自身を繰り返すリスクを冒して、次の文で答えを始めます。

ASP.NET MVC アプリケーションでは常に、ビュー モデルを使用する必要があります。

そう:

public class MyViewModel
{
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

次にコントローラー:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Those are your domain models
        // they could come from a database or something
        var listA = new[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
        var listB = new[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10" };

        // Now let's map our domain model to our view model
        var model = listB.Select(x => new MyViewModel
        {
            Name = x,
            IsChecked = listA.Contains(x)
        });

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<MyViewModel> model)
    {
        var selectedItems = model.Where(x => x.IsChecked);
        var format = string.Join(",", selectedItems.Select(x => x.Name));
        return Content("Thank you for selecting " + format);
    }
}

次に、対応するビュー ( ~/Views/Home/Index.cshtml):

@model IEnumerable<MyViewModel>

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

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

@model MyViewModel

<div>
    @Html.HiddenFor(x => x.Name)
    @Html.LabelFor(x => x.IsChecked, Model.Name)
    @Html.CheckBoxFor(x => x.IsChecked)
</div>

レンダリングされた結果 (Chrome ブラウザーで表示) は次のようになります。

ここに画像の説明を入力

ビュー モデルを使用すると、それがいかに簡単であるかがわかりますか?

于 2012-05-09T13:51:39.350 に答える