EditorFor - элемент модели, передаваемый в словарь, имеет тип «System.Int32», но для этого словаря требуется элемент модели типа «System.String» - PullRequest
10 голосов
/ 16 сентября 2011

Я не могу понять, почему это не сработает.Я использую 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?тип (для отображения логических значений в качестве флажка), и он прекрасно работает на той же странице.

РЕДАКТИРОВАТЬ

Хорошо, я искал много раз, но я не сделалвидеть этот пост, пока я не нашел его в "Связанные" ссылки.Я предполагаю, что это будет работать, но я все еще думаю, что это запутанная и противоречивая реализация:

Asp.net Mvc Показать шаблон String, но теперь каждый простой тип хочет использовать его!

Ответы [ 4 ]

5 голосов
/ 26 августа 2013

в кендо ui Grid do:

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)
%>
1 голос
/ 09 мая 2012

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

1 голос
/ 16 сентября 2011

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

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

0 голосов
/ 12 марта 2014

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

@model Int16?

@Html.TextBoxFor(model => model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...