【发布时间】:2010-03-05 13:40:52
【问题描述】:
我有一个使用抽象类的简单 Poco-Model,它似乎不适用于 Asp.net MVC 2 的 Default ModelBinder。 一个 Item 在一个集合中有多个 Object,它们都使用相同的抽象基类。
型号:
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;
使用该项目的默认 Html.EditorForModel() 帮助器和 Objects 集合中的一个 TextObject 我得到一个像这样的 html 输入字段:
<input class="text-box single-line" id="Objects_0__Text" name="Objects[0].Text" type="text" value="Text Object Text" />
回发到控制器时,我从默认 ModelBinder 收到“无法创建抽象类”错误消息。显然,活页夹试图实例化那个抽象基类。但是我不知道为什么,因为集合中只有一个继承的TextObject类型的对象。 有没有其他方法可以在不编写自定义 Modelbinder 的情况下使其正常工作?
【问题讨论】:
标签: asp.net-mvc-2 abstract-class defaultmodelbinder