这是我的问题。我有一个显示给用户的模型列表。左侧是每个型号的复选框,表示用户想要选择此型号(在这种情况下,我们正在构建用户可以添加到购物车中的产品)。该模型没有被选择的概念......它严格地包含有关产品的信息。
我已经和其他一些开发人员谈过了,我能想到的最好的是获得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。有什么原因导致它没有通过?
答案 0 :(得分:3)
您不希望将整个页面绑定到集合。
MyViewModel
的类(或任何有意义的类,使用名称中View的名称。)使该类成为强类型视图的基础。SelectableCollection<T>
添加为ViewModel的属性(称之为SelectedProducts或其他),并在Controller中填充它。 另外,您使用的是自定义CheckBoxList助手吗? ASP.NET MVC没有一个开箱即用的功能。使用此帖子构建您的复选框: