模型绑定到Lists会抛出"Collection is read-only"异常

idl*_*age 4 c# razor asp.net-mvc-4

我有一个这样的课:

public class SomeModel
{
    public List<Item> Items { get; set; }

    public SomeModel()
    {
        this.Items = new List<Item>();
    }

}
Run Code Online (Sandbox Code Playgroud)

Item形式上可以有可变数量的s,零到多.我正在使用javascript在提交时动态追加隐藏的输入字段:

$("#container").children(".item").each(function (i) {
    form.append('<input type="hidden" name="Items[' + i + '].Id" value="' + $(this).val() + '" />');
});
Run Code Online (Sandbox Code Playgroud)

但是,提交后,我收到此错误:

System.NotSupportedException: Collection is read-only.
Run Code Online (Sandbox Code Playgroud)

渲染的语法基本相同,一个我就会使用@Html.HiddenFor(model => model.Items[i].Id)model.Items作为一个数组,而不是一个列表,并且工作正常.这里出了什么问题?

行动方法签名:

public ActionResult Post(SomeModel m)
{
Run Code Online (Sandbox Code Playgroud)

Thi*_*PXP 18

您的Array可能正在处理Insert(创建新对象的位置).

当您尝试更新模型时会出现此问题.

对我来说,更换string[]List<string>解决这个问题.

//instead of....
public string[] TagsArray { get; set; }

//I now have
public List<string> TagsArray { get; set; }
Run Code Online (Sandbox Code Playgroud)


idl*_*age 1

我不确定为什么数组以前可以工作,但显然,这就是导致问题的原因——而不是列表。当我将该数组更改为列表时,我不再收到错误。应该提到的是,我的模型中仍然有该数组,抱歉。