【发布时间】:2011-03-20 10:05:02
【问题描述】:
我有两个编辑器模板:一个用于十进制,一个用于十进制? (可为空)
但是当我的模型中有一个可以为空的小数时,它会尝试加载普通的小数编辑器:
<%: Html.EditorFor(model => model.SomeDecimal )%>
<%: Html.EditorFor(model => model.SomeNullableDecimal )%>
第一个工作正常,并加载十进制编辑器模板。第二个也尝试加载十进制模板(由于它不是十进制字段而失败)。
错误信息是:
The model item passed into the dictionary is null, but this dictionary requires
a non-null model item of type 'System.Decimal'.
我的模板是这样声明的:
十进制模板:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<System.Decimal>" %>
可空十进制模板:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<System.Decimal?>" %>
我知道我可以通过传入模板名称使其工作,例如
但我真的希望它像所有其他模板一样使用类型自动工作。
<%: Html.EditorFor(model => model.SomeNullableDecimal,
"NullableDecimalTemplate" )%>
【问题讨论】:
-
您的模板名称是 Decimal.ascx 和 Decimal?.ascx 吗?
-
不,它们是 Decimal.ascx 和 NullableDecimal.ascx
-
没有人?.. 原来我可以通过在 Decimal.ascx 中复制 NullableDecimal.ascx 代码来“修复”它。奇怪的是,可以在可空模板中使用标准小数。我不知道为什么不可为空的小数会在具有以下代码的模板中工作: if (myDecimal.HasValue)
-
TimeSpan 也有同样的问题——我会用你的“修复”——非常感谢。
-
几乎就像 Decimal 扩展了 Decimal?但我们知道它不是为什么 NullableDecimal 代码适用于 Decimal 模板?没有办法为可空类型提供特殊模板?
标签: c# asp.net-mvc asp.net-mvc-2 mvc-editor-templates editortemplates