首页 文章

MVC和绑定到复选框列表

提问于
浏览
2

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

在完成之后我和其他一些开发人员进行了交谈,我能想到的最好的方法是获取formcollection和字符串解析键值以确定是否选中了复选框 . 这似乎并不理想 . 我当时认为会有更强烈的约束,但我无法找到办法 .

我尝试创建另一个模型,该模型具有一个布尔属性来表示被检查和模型的属性,并将该模型类型的列表传递给视图,并在控制器上创建一个ActionResult,接受新模型/ checked属性的列表,但它回来了 . 我只是想像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内部进行分解时,该集合为空 . 有什么理由不通过?

1 回答

  • 3

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

    • 创建一个名为 MyViewModel 的类(或任何有意义的类,使用名称中View的名称 . )使该类成为强类型视图的基础 .

    • SelectableCollection<T> 添加为ViewModel的属性(称之为SelectedProducts或其他),并在Controller中填充它 .

    • 将复选框绑定到SelectedProducts属性 .

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

    How to handle checkboxes in ASP.NET MVC forms?

相关问题