gpt4 book ai didi

asp.net-mvc-2 - 派生对象列表的 MVC2 Modelbinder

转载 作者:行者123 更新时间:2023-12-01 13:06:59 25 4
gpt4 key购买 nike

我想要一个在 Asp.net MVC 2 中使用默认模型绑定(bind)器的不同(派生)对象类型的列表。

我有以下 View 模型:

public class ItemFormModel
{
[Required(ErrorMessage = "Required Field")]
public string Name { get; set; }
public string Description { get; set; }

[ScaffoldColumn(true)]
//public List<Core.Object> Objects { get; set; }
public ArrayList Objects { get; set; }
}

并且该列表包含不同派生类型的对象,例如

public class TextObject : Core.Object
{
public string Text { get; set; }
}

public class BoolObject : Core.Object
{
public bool Value { get; set; }
}

无论我使用 List 还是 ArrayList 实现都无关紧要,所有内容都很好地构建在表单中,但是模型绑定(bind)器在回发到 ActionResult 时不会为我解析派生对象类型属性。

对于 Viewmodel 结构来说,获取处理的不同对象类型列表的好的解决方案是什么?为每个对象类型(例如 List、List 等)提供一个额外的列表对我来说似乎不是一个好的解决方案,因为这在构建 View 模型和将其映射回域模型方面都会产生大量开销。

考虑在自定义模型绑定(bind)器中绑定(bind)所有属性的其他方法,我如何在此处使用数据注释方法(验证所需的属性等)而不产生大量开销?

最佳答案

查看 Derived Type ModelBinder in MvcContrib .这允许您通过“类型标记”过程将模型绑定(bind)到派生类型——当使用 RenderTypedPartial(...) 助手时,它会自动为您处理。 MvcContrib partials 维护跨 partials 的绑定(bind)状态,因此 Name/Id 前缀在深层对象图上得到正确维护。如果您使用模板等其他机制,那么您需要自己处理类型标记。这在文档页面中有解释。

回到您的问题以及如何使用 ModelBinder 解析派生类型,您可以在类似于 WCF KnownTypeAttribute 的机制中使用属性注册派生类型变体,或者您可以在启动时进行注册。无论哪种方式,这些变体都会注册一次并保留以用于性能方面的考虑。

模型绑定(bind)器也以不干扰数据注释/验证属性的方式解决了这个问题。在任何其他情况下,它们都会像您期望的那样工作。

关于asp.net-mvc-2 - 派生对象列表的 MVC2 Modelbinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416395/

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