2011-09-16 14 views
10

Non riesco a capire perché questo non avrebbe funzionato. Sto usando ASP.NET MVC2 e sto semplicemente cercando di ignorare l'aspetto editor predefinito inserendo questo codice in /Shared/EditorTemplates/String.ascx:Editor per - L'elemento del modello passato nel dizionario è di tipo 'System.Int32', ma questo dizionario richiede un elemento del modello di tipo 'System.String'

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

Poi nella mia pagina Vedi, io ho questo linea che è di tipo Int32:

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

Per qualche ragione, questo genera l'errore:

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

io non vedo come tutto può essere sbagliato da parte mia, è abbastanza semplice. Perché tenta di utilizzare l'editor per una stringa se il tipo è un Int32? Devo anche dire che ho scavalcato l'editor per un bool? digita (per visualizzare valori booleani come una casella di controllo) e funziona perfettamente sulla stessa pagina.

EDIT

Beh ho cercato molte volte, ma non ho visto questo post fino a quando ho trovato nei collegamenti "correlati". Suppongo che questo funzionerà, penso ancora che sia un'implementazione confusa e incoerente però:

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

risposta

1

Nel modello editore gli si dice di aspettarsi una ViewUserControl<string> ma si sta passando un int al vostro EditorFor.

Poiché il modello di editor è in attesa di un string, e si sta passando in un int, non funzionerà.

+0

Ok, beh credo che questa sia la parte confusa per me. Ho pensato che fosse usato il riflesso per scegliere il modello di editor corretto. Non è questo il caso? Come ho detto, ho un bool? modello e rende correttamente i valori booleani - non chiama il modello di stringa. – user949286

+0

Hai un modello int separato? –

+0

No, non lo so. Non penserei che ne avrei bisogno, perché ho creato per la prima volta il bool? modello, e tutto ha continuato a funzionare. Quindi ho creato il modello di stringa e si è verificato questo errore. Forse dovrei semplicemente creare il template int, ma potrei avere molti altri tipi e mi piacerebbe che usasse il template di default per quelli quindi non devo generare template ridondanti non necessari. – user949286

1

Ho appena rilevato questo errore, ma con un DateTime. Sono stato in grado di riavviare le cose cambiando il modello di editor per utilizzare Object come tipo di modello.

5

nella griglia ui kendo fare:

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

in Integer.ascx nella cartella Shared/EditorTemplate fare:

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

Ho affrontato lo stesso problema con il campo Int16 anche se ho modello numero intero progetto, così ho dovuto creare un modello specifico per Int16 FileName: Int16.cshtml Html:

@model Int16? 

@Html.TextBoxFor(model => model) 
Problemi correlati