gpt4 book ai didi

asp.net-mvc-2 - 使用抽象类的 Asp.Net MVC 2 DefaultModelBinder 错误

转载 作者:行者123 更新时间:2023-12-01 00:03:37 26 4
gpt4 key购买 nike

我有一个使用抽象类的简单 Poco-Model,它似乎不适用于 Asp.net MVC 2 的 Default ModelBinder。
一个项目在一个集合中有多个对象,它们都使用相同的抽象基类。

模型:

    public partial class Item
{
public virtual ICollection<Core.Object> Objects
{
get
{
return _objects;
}
set
{
if (value != _objects)
{
_objects = value;
}
}
}
private ICollection<Core.Object> _objects;
}


public abstract partial class Object
{

public virtual Item Item
{
get
{
return _item;
}
set
{
if (!Object.ReferenceEquals(_item, value))
{
_item = value;
}
}
}
private Item _item;

}

public partial class TextObject : Object
{
public virtual string Text { get; set; }
}

实例:
var NewItem = new Item();                    
var TextObject1 = new TextObject
{
Text = "Text Object Text",
Item = NewItem
};
List<Core.Object> objects = new List<Core.Object>(){TextObject1};
NewItem.Objects = objects;

在 Objects 集合中使用带有一个 TextObject 的该项目的 Default Html.EditorForModel() Helper 我得到一个像这样的 html 输入字段:
<input class="text-box single-line" id="Objects_0__Text" name="Objects[0].Text" type="text" value="Text Object Text" />

回发到 Controller 时,我从默认 ModelBinder 收到“无法创建抽象类”错误消息。显然,活页夹试图实例化那个抽象基类。但是我不知道为什么,因为集合中只有一个继承的TextObject类型的对象。
有没有其他方法可以在不编写自定义 Modelbinder 的情况下使其工作?

最佳答案

您将不得不使用自定义模型绑定(bind)器或使用 View 模型。模型绑定(bind)器只知道您用作操作参数的类型(包含抽象类)。然后它尝试将请求中的值映射到该模型。绑定(bind)器无法知道它应该使用其他一些实现以及可能是什么实现。

我的建议是创建更简单的 View 模型并使用 automapper 映射它们。 .

关于asp.net-mvc-2 - 使用抽象类的 Asp.Net MVC 2 DefaultModelBinder 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387082/

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