【问题标题】:MVC and binding to List of CheckboxesMVC 和绑定到复选框列表
【发布时间】:2010-05-27 14:49:01
【问题描述】:

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

在完成之后,我与其他一些开发人员进行了交谈,我能想到的最好的方法是获取表单集合和字符串解析键值以确定复选框是否被选中。这似乎并不理想。我在想会有更强烈的约束,但我想不出办法来做到这一点。

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

这是我为将模型包装到集合中所做的:


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 内部中断时,集合为空。没有通过的任何原因?

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

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

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

另外,您是否使用自定义 CheckBoxList 助手?没有一个开箱即用的 ASP.NET MVC。使用这篇文章来构建您的复选框:

How to handle checkboxes in ASP.NET MVC forms?

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2018-03-11
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多