【发布时间】:2012-01-06 17:50:12
【问题描述】:
根据:MVC3 Model binding pagedlist to ViewModel with custom EditorTemplate and Partial View
代码 sn-ps 见上述问题
我现在遇到的问题是绑定自定义 IPagedList 集合。模型绑定器尝试将值绑定到 ViewModel 上的属性,但无法创建接口的实例(这并不奇怪)。
那么,当绑定值时,如何通过实例化一个具体的 PagedList 类将值绑定回我的 viewModel?据我了解,IEnumerable binder 为 List 或类似的派生词执行此操作,那么我该如何为我的自定义类/接口执行此操作?
我需要一个自定义模型绑定器吗?如果是这样,任何关于此的信息或代码提示都很棒!
任何帮助都非常感谢。
更新:
更改 ViewModel 以包含一个重写的默认构造函数,该构造函数初始化接口,如下所示:
public class RequestCreateViewModel : ViewModelBase
{
public IPagedList<CreateRequestModel> PagedList { get; set; }
public RequestCreateVieWModel()
{
PagedList = new PagedList<RequestCreateModel>(new List<RequestCreateModel>(), new PagingOptions());
}
.. 似乎允许默认模型绑定器按照我的评论工作。但这似乎不是一个很好的解决方案,主要是因为我需要在每次创建 ViewModel 时为 PagedList 对象推断新的对象参数。我是否有不必要的担心?
【问题讨论】:
-
我会研究自定义模型绑定器。一开始很吓人,但也不算太糟糕。您可以使用此功能做很多事情。请记住,有两种不同的方法可以做到这一点。从 DefaultModelBinder 继承并创建您自己的简单实现 IModelBinder 的绑定器。
-
有人知道杰夫所说的更多信息吗?谢谢
-
已经为 ViewModel 对象添加了一个构造函数并初始化了接口,默认绑定器完成了它的工作并使用正确的命名进行绑定。灵感来自:stackoverflow.com/questions/5749775/… 但它确实避免了为此创建自定义模型绑定器......所以我的问题仍然是这是否是一个好主意?
-
没有人有任何 cmets 或更好的解决方案?定制活页夹会更好吗?
标签: c# asp.net-mvc asp.net-mvc-3 viewmodel model-binding