这是我的模特
public class MessageSetTypeCollection<T> : CollectionBase where T : MessageSetType, new()
{
public string Name { get; set; }
public string[] Tags { get; set; }
public MessageSetType this[int index]
{
get
{
return (MessageSetType)List[index];
}
}
public void Add(MessageSetType value)
{
List.Add(value);
}
}
这是我的控制器动作
public ActionResult TestAction()
{
MessageSetTypeCollection<MessageSetType> Model = new MessageSetTypeCollection<MessageSetType>();
Model.Add(new MessageSetType()
{
Alert = "test" // Alert is a public property of the MessageSetType class
});
Model.Add(new MessageSetType()
{
Alert = "test2"
});
return View(Model);
}
[HttpPost]
public void TestAction(MessageSetTypeCollection<MessageSetType> Model)
{
return;
}
在视图中我已经使用了此代码
@using (Html.BeginForm())
{
@Html.EditorFor(a => a[0].Alert)
@Html.EditorFor(a => a[1].Alert)
<input type="submit" value="OK" />
}
当我将此表单提交给TestAction操作时,Model参数的内部列表具有Count 0元素。为什么呢?
我还使用List<MessageSetType>
模型类型而不是MessageSetTypeCollection<MessageSetType>
测试了此代码,并且所有代码都正常运行。错误在哪里?
答案 0 :(得分:0)
请参阅此处的List源代码: http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
实施方式非常不同。您没有一个MessageSetType类型的集合,您的索引器应该在其上工作。
我认为您可以使用源代码调整模型:MessageSetTypeCollection。
答案 1 :(得分:0)
我已经决定从MessageSetTypeCollection<T>
继承List<T>
而不是CollectionBase
public class MessageSetTypeCollection<T> : List<T> where T : MessageSetType, new()
{
//Omissis
}