Asp.net mvc 2 EditorFor-传入字典的模型项的类型为';System.Int32';,但本词典需要类型为';System.String';

Asp.net mvc 2 EditorFor-传入字典的模型项的类型为';System.Int32';,但本词典需要类型为';System.String';,asp.net-mvc-2,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" }) %> 我看不出我

我似乎不明白为什么这样不行。我使用的是ASP.NET MVC2,我只是试图通过将此代码放入/Shared/EditorTemplates/String.ascx来覆盖默认编辑器外观:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%=Html.TextBox(null, Model, new { @class="Text" }) %>
我看不出我这方面有什么不对劲,很简单。如果类型是Int32,为什么它会尝试对字符串使用编辑器?我还应该提到,我已经为一个bool覆盖了编辑器?键入(将布尔值呈现为复选框),它在同一页面上工作正常

编辑

我搜索了很多次,但直到在“相关”链接中找到这篇文章,我才看到它。我认为这会起作用,但我仍然认为这是一个混乱且不一致的实现:


在编辑器模板中,您告诉它需要一个
ViewUserControl
,但您正在将
int
传递给
编辑器for


由于编辑器模板正在等待一个
字符串,而您正在传递一个
int
,因此它无法工作。

我刚刚遇到了这个错误,但带有日期时间。通过将编辑器模板更改为使用
对象
作为其模型类型,我可以使事情再次顺利进行。

在剑道ui网格中:

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)
%>

m)
.HtmlAttributes(新的{style=“width:100%”)
.Min(int.MinValue)
.Max(int.MaxValue)
%>

尽管我在项目中有整数模板,但我在Int16字段中遇到了同样的问题,所以我必须为Int16创建一个特定的模板 文件名:Int16.cshtml Html:


好吧,我想这是让我困惑的部分。我认为它使用反射来选择正确的编辑器模板。不是这样吗?就像我说的,我有布尔?模板,它正确地呈现布尔值-它不调用字符串模板。您有单独的int模板吗?不,我没有。我不认为我需要一个,因为我首先创造了布尔?模板,一切都继续工作。然后我创建了字符串模板,出现了这个错误。也许我应该只创建int模板,但我可能有许多其他类型,我希望它使用默认模板,这样我就不必生成不必要的冗余模板。只是为了更详细的信息-我尝试创建int模板,但只要仍然有字符串模板,就会出现相同的错误。一旦我删除了字符串模板,错误就消失了,并正确地呈现了它。出于某种原因,总是为int值选择字符串编辑器模板。
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; }
    }
<%@ 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)
%>
@model Int16?

@Html.TextBoxFor(model => model)