2011-09-16 24 views
10

Parece que no puedo entender por qué esto no funcionaría. Estoy usando ASP.NET y MVC2 Simplemente estoy tratando de anular la aparición editor por defecto colocando este código en /Shared/EditorTemplates/String.ascx:EditorPara - El elemento de modelo pasado al diccionario es del tipo 'System.Int32', pero este diccionario requiere un elemento de modelo de tipo 'System.String'

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

Luego, en mi página de Vista, tengo este línea que es de tipo Int32:

<%: Html.EditorFor(model => model.AppID) %> 

Por alguna razón, el resultado es el error:

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'. 

no veo cómo algo podría estar mal en mi final, es bastante simple. ¿Por qué trata de usar el editor para una cadena si el tipo es un Int32? También debo mencionar que he anulado al Editor por un bool? escriba (para representar valores booleanos como una casilla de verificación) y funciona perfectamente en la misma página.

EDITAR

Bueno, yo han buscado muchas veces, pero no vi este post hasta que me encontré en los enlaces "relacionados". Supongo que esto va a funcionar, sigo pensando que es una aplicación confusa e inconsistente sin embargo:

Asp.net Mvc Display template of String, but now every simple type wants to use it!

Respuesta

1

En el editor de plantillas que has dicho que esperan un ViewUserControl<string> pero estás pasando un int a su EditorFor.

Dado que la plantilla del editor está esperando un string, y está pasando en un int, no funcionará.

+0

Ok, bueno, supongo que esa es la parte confusa para mí. Pensé que utilizaba la reflexión para elegir la plantilla de editor correcta. No es ese el caso? Como dije, tengo bool? plantilla, y representa valores booleanos correctamente; no llama a la plantilla de cadena. – user949286

+0

¿Tiene una plantilla int separada? –

+0

No, yo no. No pensaría que necesitaría uno, porque primero creé el bool? plantilla, y todo continuó funcionando. Luego creé la plantilla de cadena y ocurrió este error. Tal vez debería simplemente crear la plantilla int, pero puedo tener muchos otros tipos y me gustaría usar la plantilla predeterminada para esos, así no tengo que generar plantillas redundantes innecesarias. – user949286

1

Acabo de encontrar este error, pero con un DateTime. Pude hacer que las cosas funcionen nuevamente al cambiar la plantilla del editor para usar Object como su tipo de modelo.

5

en cuadrícula ui kendo hacer:

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; } 
    } 

en Integer.ascx en la carpeta/EditorTemplate Shared:

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

que enfrentan el mismo problema con el campo Int16 aunque tengo plantilla entero en el proyecto, por lo que tuve que crear una plantilla específica para Int16 FileName: Int16.cshtml HTML:

@model Int16? 

@Html.TextBoxFor(model => model) 
Cuestiones relacionadas