EditorFor - 传递到字典中的模型项是'System.Int32'类型,但是这个字典需要一个'System.String'类型的模型项

时间:2011-09-16 16:55:56

标签: asp.net-mvc-2

我似乎无法弄清楚为什么这不起作用。我正在使用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!

4 个答案:

答案 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)