[英]MVC3 Binding a custom Collection
按照: MVC3模型将页面列表绑定到具有自定义EditorTemplate和Partial View的ViewModel
有关代码段,请参见上面的问题
我现在遇到的问题是绑定自定义IPagedList集合。 模型绑定程序尝试将值绑定到ViewModel上的属性,但是无法创建接口的实例(此处未提供)。
那么,如何在绑定值时实例化具体的PagedList类,将值绑定回我的viewModel? 据我了解,IEnumerable活页夹是针对列表或类似的派生类这样做的,那么我该如何为我的自定义类/接口做呢?
为此,我需要自定义模型活页夹吗? 如果是这样,那么任何有关此方面的信息或代码提示都很棒!
任何帮助,非常感谢。
更新:
更改ViewModel使其包含重写的默认构造函数,该构造函数将初始化接口,如下所示:
public class RequestCreateViewModel : ViewModelBase
{
public IPagedList<CreateRequestModel> PagedList { get; set; }
public RequestCreateVieWModel()
{
PagedList = new PagedList<RequestCreateModel>(new List<RequestCreateModel>(), new PagingOptions());
}
..似乎允许根据我的评论使用默认模型联编程序。 但这似乎不是一个很好的解决方案,主要是因为每次创建ViewModel时,我都需要为PagedList对象推断新的对象参数。 我不用担心吗?
在Codeplex上的ASP.NET MVC项目中查看DefaultModelBinder.cs
的源代码。 BindComplexModel
的注释将BindComplexModel
总结为:
// special-case IDictionary<,> and ICollection<>
如果MVC框架对这些类型有特殊情况,那么您将需要为您的类型创建自定义模型绑定程序。 但是您提供的解决方案可行...为什么? 您的类型不实现ICollection
或IDictionary
特殊情况。 默认代码路径调用模型类型的默认构造函数:
// fallback to the type's default constructor
return Activator.CreateInstance(typeToCreate);
您的默认构造函数创建所需的类型。 因此,没有错误。 没有默认的构造函数,没有对象实例,并且正如您所指出的,您将得到一个错误。
您要求更多的想法。 剩下的东西怎么样。 有用。 此时,编写自定义模型活页夹将需要更多工作。 更多代码可以完成同一件事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.