ViewModel属性,用于MVC 5中的多个选择

时间:2015-02-27 15:46:08

标签: c# asp.net-mvc mvvm asp.net-mvc-5

我尝试在表单中创建一组one-to-many值。虽然this答案可能是我需要的,但根据要求,我无法使用@Html.ListBoxFor,因为我需要提供每个项目的详细信息,因此最好使用{checkbox 1}}输入选择。

问题是我不知道如何将这些复选框绑定到我的viewmodel中的属性(如果可能的话ICollection<MyType> myItemList)。

我的View Model包含所述属性,因此GET Create()视图可以使用它并显示每个项目的信息属性信息。所以我在POST Create(MyViewModel vm)遇到麻烦来获取所选值列表(或只是ID)

我该怎么做?

2 个答案:

答案 0 :(得分:1)

因此,假设您可以将模型中的属性更改为:

List<MyType> myItemList

我们可以向MyType添加一个属性来表示选择:

public bool IsSelected { get; set; }

然后你可以这样做:

@for (int i = 0; i < Model.myItemList.Count; i++)
{
    @Html.HiddenFor(m => Model.myItemList[i].Id)
    @Html.LabelFor(m => Model.myItemList[i].Text)
    @Html.CheckBoxFor(m => Model.myItemList[i].IsSelected)
}

注意:我认为Id是ID,您在上面的代码中有一个名为Text的文字字段。

然后,要获取所选项目,您的HttpPost方法将类似于:

public ActionResult YourAction(YourModel Model)
{
    var selections = Model.myItemList
        .Where(m => m.IsSelected)
        .ToList();

   //do what you want with those selections
}

答案 1 :(得分:0)

您可以将复选框绑定到这样的列表......

[HttpPost]
public ActionResult MyAction(IEnumerable<int> selectedValues)

<form method="post">
    <input type="checkbox" name="SelectedValues[]" value="1"/>
    <input type="checkbox" name="SelectedValues[]" value="2" />
    <button>Submit</button>
</form>

复选框上的value属性将是您的ID值