抽象クラスを使用する単純な Poco-Model がありますが、Asp.net MVC 2 のデフォルトの ModelBinder では機能しないようです。1 つのアイテムには、コレクション内に複数のオブジェクトがあり、すべて同じ抽象基本クラスを使用しています。
モデル:
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 コレクション内の 1 つの TextObject を使用して、そのアイテムに Default Html.EditorForModel() ヘルパーを使用すると、次のような html 入力フィールドが得られます。
<input class="text-box single-line" id="Objects_0__Text" name="Objects[0].Text" type="text" value="Text Object Text" />
コントローラーにポストバックすると、デフォルトの ModelBinder から「抽象クラスを作成できません」というエラー メッセージが表示されます。明らかに、バインダーはその抽象基本クラスをインスタンス化しようとします。しかし、コレクションには継承された TextObject タイプのオブジェクトしかないため、その理由はわかりません。カスタム Modelbinder を作成せずにこれを機能させる方法はありますか?