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)