【发布时间】: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 内部中断时,集合为空。没有通过的任何原因?
【问题讨论】:
-
如果无法查看您的视图代码,我将假设 MVC 的默认模型绑定器无法将您的视图与您的模型相协调。 Scott Hanselman 写了一篇关于如何take advantage of the relationship between your View and the default model binder 的博客。
标签: c# asp.net-mvc