2011-09-16 13 views
10

Nie mogę się domyślić, dlaczego to nie zadziała. Używam ASP.NET MVC2 a ja po prostu próbuje nadpisać wygląd domyślny edytor umieszczając ten kod na /Shared/EditorTemplates/String.ascx:EditorFor - Element modelu przekazany do słownika ma typ "System.Int32", ale ten słownik wymaga elementu modelu typu "System.String"

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

Wtedy moim zdaniem strony, mam to linia, która jest typu Int32:

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

z jakiegoś powodu, to powoduje błąd:

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

nie widzę, jak coś może być nie tak w moim końcu, to całkiem proste. Dlaczego próbuje użyć edytora do napisu, jeśli typ to Int32? Powinienem też wspomnieć, że zastąpiłem Redaktora boolem? type (do wyświetlania wartości logicznych jako checkbox) i działa dobrze na tej samej stronie.

EDIT

Dobrze Szukałem wiele razy, ale nie widzę tego posta aż znalazłem go w „pokrewne” linki. Przypuszczam, że to będzie działać, nadal uważam, że jest to mylące i niespójne wdrażanie choć:

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

Odpowiedz

1

W szablonie edytora mówiłeś go oczekiwać ViewUserControl<string> ale jesteś przechodząc int do EditorFor.

Ponieważ szablon edytora czeka na string, a użytkownik przechodzi pod numer int, nie będzie działać.

+0

OK, myślę, że to jest myląca część dla mnie. Myślałem, że użył refleksji, aby wybrać poprawny szablon edytora. Czy tak nie jest? Jak powiedziałem, mam bool? szablon i poprawnie renderuje wartości logiczne - nie wywołuje szablonu łańcucha. – user949286

+0

Czy masz osobny szablon int? –

+0

Nie, nie mam. Nie sądzę, że będę go potrzebować, bo najpierw stworzyłem bool? szablon i wszystko nadal działało. Następnie utworzyłem szablon łańcucha i wystąpił ten błąd. Może powinienem po prostu utworzyć szablon int, ale mogę mieć wiele innych typów i chciałbym, aby używał domyślnego szablonu dla nich, więc nie muszę generować niepotrzebnych zbędnych szablonów. – user949286

1

Po prostu napotkałem ten błąd, ale z DateTime. Udało mi się sprawić, że sprawy znów się kręcą, zmieniając szablon edytora tak, aby używał Object jako typu modelu.

5

w kendo ui siatki zrobić:

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

w Integer.ascx w folderze udostępnionym/EditorTemplate zrobić:

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

I w obliczu tego samego problemu z pola Int16 choć mam Integer szablonu w projektu, więc musiałem stworzyć określony szablon dla Int16 Nazwa pliku: Int16.cshtml Html:

@model Int16? 

@Html.TextBoxFor(model => model) 
Powiązane problemy