gpt4 book ai didi

c# - MVC3 绑定(bind)自定义集合

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:05 24 4
gpt4 key购买 nike

根据:MVC3 Model binding pagedlist to ViewModel with custom EditorTemplate and Partial View

查看上面的代码片段问题

我现在遇到的问题是绑定(bind)自定义 IPagedList 集合。模型绑定(bind)器尝试将值绑定(bind)到 ViewModel 上的属性,但无法创建接口(interface)的实例(这并不奇怪)。

那么如何在绑定(bind)值时通过实例化具体的 PagedList 类将值绑定(bind)回我的 viewModel?据我了解,IEnumerable Binder 为 List 或类似的衍生物执行此操作,那么我如何为我的自定义类/接口(interface)执行此操作?

我需要为此定制模型 Binder 吗?如果是这样,关于此的任何信息或代码提示都很棒!

非常感谢任何帮助。

更新:

更改 ViewModel 以包含一个重写的默认构造函数,它像这样初始化接口(interface):

public class RequestCreateViewModel : ViewModelBase
{
public IPagedList<CreateRequestModel> PagedList { get; set; }

public RequestCreateVieWModel()
{
PagedList = new PagedList<RequestCreateModel>(new List<RequestCreateModel>(), new PagingOptions());
}

.. 似乎允许默认模型 Binder 按照我的评论工作。但这似乎不是一个很好的解决方案,主要是因为我需要在每次创建 ViewModel 时为 PagedList 对象推断新的对象参数。我是在不必要地担心吗?

最佳答案

Codeplex 上的 ASP.NET MVC 项目中查看 DefaultModelBinder.cs 的源代码. BindComplexModel 中的注释总结了这一切:

// special-case IDictionary<,> and ICollection<>

如果 MVC 框架对这些类型进行特殊处理,那么您将需要为您的类型创建自定义模型绑定(bind)器。但是您提供的解决方案有效……为什么?您的类型未实现 ICollectionIDictionary 特殊情况。默认代码路径调用模型类型的默认构造函数:

// fallback to the type's default constructor
return Activator.CreateInstance(typeToCreate);

您的默认构造函数创建您需要的类型。因此,没有错误。没有默认构造函数,没有对象实例,正如您所指出的,您会收到错误消息。

您要求提供更多想法。留下你所拥有的怎么样?有用。在这一点上编写自定义模型 Binder 只是需要更多的工作。更多代码来完成同样的事情。

关于c# - MVC3 绑定(bind)自定义集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com