gpt4 book ai didi

c# - 集合在 ViewModel 中的数组上是只读的

转载 作者:行者123 更新时间:2023-11-30 15:58:39 25 4
gpt4 key购买 nike

我有一个看起来像这样的 MVC ViewModel:

public class FruitBoxViewModel {

public FruitBoxViewModel()
{
BoxLabels = new BoxLabelViewModel[3];
}

public int Id { get; set; }
public string Name { get; set; }
public BoxLabelViewModel[] BoxLabels {get; set; }
}

有评论要求查看 BoxLabelViewModel 的样子,这里是:

public class BoxLabelViewModel {
public string SkuCode {get; set;}
public int? ProductionNumber { get; set; }
}

每个 FruitBox 可以有 1 到 3 个 BoxLabels,不多也不少。为了强制执行这一点,我想我会使用 Array 而不是 List

我的 Razor View 中有一个 for 循环来处理我在页面上的输入:

@for(var i = 0; i < 3; i++ )
{
@Html.LabelFor(model => Model.BoxLabels[i].SkuCode)
@Html.EditorFor(m => Model.BoxLabels[i].SkuCode, new { htmlAttributes = new { @class = "form-control" } })
}

当我提交表单时,出现蓝屏死机 (YSOD) 错误:

Collection is read-only.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NotSupportedException: Collection is read-only.

是否有一条我不知道的规则说你永远不应该在你的 ViewModels 中使用数组之类的东西?

最佳答案

这是使用数组而不是列表的“成功”案例之一。模型绑定(bind)器不会创建数组的新实例,因为您在构造函数中提供了一个。然后它将使用它作为 IList 实例并尝试调用 InsertAdd 并且这样的调用将对数组失败而对列表成功。

只需删除赋值表单构造函数或在您的模型中使用列表并在发送发布请求之前编写一些 JS 来验证您的表单。然后在服务器端验证项目数。

关于c# - 集合在 ViewModel 中的数组上是只读的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com