我似乎无法弄清楚为什么这不起作用。我正在使用ASP.NET MVC2,我只是试图通过将此代码放入/Shared/EditorTemplates/String.ascx来覆盖默认的编辑器外观:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%=Html.TextBox(null, Model, new { @class="Text" }) %>
然后在我的View页面中,我有一行类型为Int32:
<%: Html.EditorFor(model => model.AppID) %>
由于某种原因,这会导致错误:
System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Int32', but this dictionary requires a model item of type 'System.String'.
我不知道我的结果有什么不对,这很简单。如果类型是Int32,为什么它会尝试使用编辑器作为字符串?我还应该提一下,我已经覆盖了编辑器的一个bool? type(将布尔值渲染为复选框),它在同一页面上工作正常。
修改
我搜索了很多次,但直到我在“相关”链接中找到它之前我才看到这个帖子。我想这会起作用,但我仍然认为这是一个令人困惑和不一致的实现:
Asp.net Mvc Display template of String, but now every simple type wants to use it!
答案 0 :(得分:5)
在kendo ui Grid中:
public class BookBean
{
[ScaffoldColumn(false)]
public Int32 Id { set; get; }
public String Title { set; get; }
public String Author { set; get; }
public String Publisher { set; get; }
[UIHint("Integer")]
public Int32 Price { set; get; }
[UIHint("Integer")]
public Int32 Instore { set; get; }
[UIHint("Integer")]
public Int32 GroupId { get; set; }
}
在Shared / EditorTemplate文件夹中的Integer.ascx中的执行:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>
<%: Html.Kendo().IntegerTextBoxFor(m => m)
.HtmlAttributes(new { style = "width:100%" })
.Min(int.MinValue)
.Max(int.MaxValue)
%>
答案 1 :(得分:1)
在您的编辑器模板中,您告诉它预期ViewUserControl<string>
,但您将int
传递给EditorFor
。
由于编辑器模板正在等待string
,而您正在传递int
,因此无法使用。
答案 2 :(得分:1)
我刚刚遇到此错误,但是使用了DateTime。通过更改编辑器模板以使用Object
作为模型类型,我能够重新开始工作。
答案 3 :(得分:0)
我遇到了与Int16字段相同的问题,虽然我在项目中有Integer模板,所以我不得不为Int16创建一个特定的模板 FileName:Int16.cshtml Html:
@model Int16?
@Html.TextBoxFor(model => model)