【问题标题】:MVC3 createoredit template now blowing up on nullable int fieldMVC3 createoredit 模板现在在可为空的 int 字段上爆炸
【发布时间】:2011-11-29 16:03:03
【问题描述】:

在对我的项目进行了一些升级之后,突然我生成的“_createoredit.cshtml”文件被这样炸毁了:

传入字典的模型项为空,但是这个字典 需要“System.Int32”类型的非空模型项。描述: 当前执行过程中发生了未处理的异常 网络请求。请查看堆栈跟踪以获取有关的更多信息 错误及其起源于代码的位置。

异常详细信息:System.InvalidOperationException:模型项 传入字典是空的,但是这个字典需要一个 'System.Int32' 类型的非空模型项。

来源错误:

Line 273:</div> 
Line 274:<div class="editor-field"> 
Line 275:@Html.EditorFor(model => model.NumOfStores)
Line 276:@Html.ValidationMessageFor(model => model.NumOfStores)
Line 277:</div>

它引用的字段是一个可为空的 int 类型。 这只是之前的工作(生产版本仍然运行良好),我对项目所做的更改不应该触及它使用的任何东西,所以现在我无法弄清楚为什么这会爆炸。

更新 1- 从模型中添加字段 def

[DisplayName("Number of Stores (if applicable)")]
public Nullable<int> NumOfStores { get; set; }

我还验证了所有可以为空的值类型都存在同样的问题。

【问题讨论】:

    标签: asp.net-mvc-3 razor scaffolding asp.net-mvc-scaffolding


    【解决方案1】:

    尝试为您的模板指定一个名称。

    @Html.EditorFor(model => model.NumOfStores, "NumStoresTemplate")
    

    更多信息(来自 MVC 2,但我认为它适用于您的情况)http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

    【讨论】:

    • 另外 - model.NumOfStores 是可为空的 int 类型,所以应该没问题。这是我第一次弄乱 mvc 表单和模板,这让我大吃一惊,它们是多么的脆弱和正义……它们太糟糕了。
    • also - null 对我来说是一个合法值,而零是另一个值,所以我不能将其默认为零。
    • 对不起,我想我误解了这个问题。您是否在 ~/Views/Shared/EditorTemplates 安装了任何自定义模板?将可为空的模型项绑定到视图似乎是一个问题。
    • 另外,你能发布你的 ViewModel 的代码吗?您的模型定义中确实有一个可为空的 int ,对吗?我认为您传递给视图的内容与视图期望的内容不匹配。
    • [DisplayName("商店数量(如果适用)")] public Nullable NumOfStores { get;放; }
    【解决方案2】:

    我最终为 int32 和 double 添加了自定义编辑器模板以使其正常工作。我意识到我正在使用的项目添加了 Telerik 控件,所以我认为我不确定如何调试东西,似乎他们以某种方式参与了默认模板。

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2012-08-30
      • 2013-05-26
      • 2020-04-10
      相关资源
      最近更新 更多