首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到列表的模型抛出"Collection is read-only“异常

绑定到列表的模型抛出"Collection is read-only“异常
EN

Stack Overflow用户
提问于 2013-12-06 00:30:27
回答 4查看 10.8K关注 0票数 6

我有一个这样的类:

代码语言:javascript
复制
public class SomeModel
{
    public List<Item> Items { get; set; }

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

}

其中在表单发布时可以有可变数量的Item,从零到多。我使用javascript在提交时动态添加隐藏的输入字段:

代码语言:javascript
复制
$("#container").children(".item").each(function (i) {
    form.append('<input type="hidden" name="Items[' + i + '].Id" value="' + $(this).val() + '" />');
});

然而,在提交之后,我得到了这个错误:

代码语言:javascript
复制
System.NotSupportedException: Collection is read-only.

呈现的语法与我使用@Html.HiddenFor(model => model.Items[i].Id)得到的语法基本相同,model.Items是一个数组,而不是一个列表,这很好用。这里出了什么问题?

Action方法签名:

代码语言:javascript
复制
public ActionResult Post(SomeModel m)
{
EN

回答 4

Stack Overflow用户

发布于 2015-03-07 10:15:56

您的数组可能正在执行插入(创建新对象的位置)。

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

对我来说,将string[]替换为List<string>解决了这个问题。

代码语言:javascript
复制
//instead of....
public string[] TagsArray { get; set; }

//I now have
public List<string> TagsArray { get; set; }
票数 20
EN

Stack Overflow用户

发布于 2013-12-06 23:05:35

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

票数 1
EN

Stack Overflow用户

发布于 2021-06-16 01:06:01

MVC模型绑定器应该与数组一起工作,因此用列表替换是一种变通办法,但不是正确的解决方案。

我也有同样的问题,但它只是偶尔会发生在我身上。所以我不明白为什么会发生这个问题。然后我发现了一些我认为值得分享的东西:问题出在javascript代码中。

下面是我的场景:

我有一个使用一个数组的模型

代码语言:javascript
复制
public class SomeModel
{
    public Item[] Items { get; set; }

    public SomeModel()
    {
        this.Items = new Item[3] {0, 0, 0};
    }
}

我发现解决方案就是改变我用来调用web方法的javascript!

->案例A-抛出异常"Collection is read only"

代码语言:javascript
复制
$.ajax({
        type: "POST",
        async: true,
        url: myUrl,
        data: JSON.stringify(myData),
        contentType: "application/json; charset=utf-8",
        dataType: "html"
    })

->案例B-它的工作没有任何异常!

代码语言:javascript
复制
$.ajax({
        type: "POST",
        async: true,
        url: myUrl,
        data: myData,
        dataType: "html"
    })

实际上,MVC模型绑定应该与数组一起工作,所以用列表替换并不是我想要的答案。

很好的编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20405400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档