MVC和绑定到复选框列表

时间:2010-05-27 14:49:01

标签: c# asp.net-mvc

这是我的问题。我有一个显示给用户的模型列表。左侧是每个型号的复选框,表示用户想要选择此型号(在这种情况下,我们正在构建用户可以添加到购物车中的产品)。该模型没有被选择的概念......它严格地包含有关产品的信息。

我已经和其他一些开发人员谈过了,我能想到的最好的是获得formcollection和字符串解析键值来确定是否选中了复选框。这似乎并不理想。我当时认为会有更强烈的约束,但我无法找到办法。

我尝试创建另一个模型,该模型具有一个布尔属性来表示被检查和模型的属性,并将该模型类型的列表传递给视图,并在控制器上创建一个ActionResult,接受新模型的列表/检查属性,但它返回null。我只是想像Web表单一样,应该继续解析复选框值吗?

以下是我在集合中包装模型所做的工作:


public class SelectableCollection[T] : IList[T] {} 
public class SelectableTrack{ 
  public bool IsChecked{get;set;} 
  public bool CurrentTrack{get;set;} 
} 
对于视图,我继承自


ViewPage[SelectableCollection[SelectableTrack]] 

对于控制器,我将其作为ActionResult:


    [HttpPost] 
    public ActionResult SelectTracks(SelectableCollection sc) { 

       return new EmptyResult(); 
    } 

但是当我在ActionResult内部进行分解时,该集合为null。有什么原因导致它没有通过?

1 个答案:

答案 0 :(得分:3)

您不希望将整个页面绑定到集合。

  • 创建一个名为MyViewModel的类(或任何有意义的类,使用名称中View的名称。)使该类成为强类型视图的基础。
  • SelectableCollection<T>添加为ViewModel的属性(称之为SelectedProducts或其他),并在Controller中填充它。
  • 将复选框绑定到SelectedProducts属性。

另外,您使用的是自定义CheckBoxList助手吗? ASP.NET MVC没有一个开箱即用的功能。使用此帖子构建您的复选框:

How to handle checkboxes in ASP.NET MVC forms?