EditorFor - элемент модели, переданный в словарь, имеет тип "System.Int32", но для этого словаря требуется элемент модели типа "System.String",

Я не могу понять, почему это не сработает. Я использую ASP.NET MVC2, и я просто пытаюсь переопределить внешний вид редактора по умолчанию, поместив этот код в /Shared/EditorTemplates/String.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%=Html.TextBox(null, Model, new { @class="Text" }) %>

Затем на моей странице "Вид" у меня есть эта строка типа 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 Показать шаблон String, но теперь каждый простой тип хочет его использовать!

Ответ 1

в кендо 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; }
    }

в Integer.ascx в папке Shared/EditorTemplate выполните:

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

Ответ 2

В вашем шаблоне редактора вы сказали ему ожидать ViewUserControl<string>, но вы передаете int на ваш EditorFor.

Поскольку шаблон редактора ожидает string, и вы проходите в int, он не будет работать.

Ответ 3

Я только что столкнулся с этой ошибкой, но с DateTime. Я смог снова выполнить все, изменив шаблон редактора, чтобы использовать Object в качестве своего типа модели.

Ответ 4

Я столкнулся с той же проблемой с полем Int16, хотя у меня есть шаблон Integer в проекте, поэтому мне пришлось создать конкретный шаблон для Int16 Имя файла: Int16.cshtml Html:

@model Int16?

@Html.TextBoxFor(model => model)