我似乎無法弄清楚爲什麼這樣做不起作用。我使用ASP.NET MVC2,我只是試圖通過將該代碼放到/Shared/EditorTemplates/String.ascx覆蓋默認編輯器外觀:EditorFor - 傳入字典的模型項目類型爲'System.Int32',但是此字典需要一個'System.String'類型的模型項目。
<%@ 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,爲什麼它會嘗試將編輯器用於字符串?我還應該提及,我已經覆蓋編輯器的布爾?鍵入(以呈現布爾值作爲複選框),並且它在同一頁面上工作得很好。
編輯
嗯,我搜索了很多次,但我沒有看到這篇文章,直到我發現它在「相關」鏈接。我想這會的工作,我仍然認爲這是一個混亂和不一致的實現,但:
Asp.net Mvc Display template of String, but now every simple type wants to use it!
好吧,好吧,我想這是令我感到困惑的部分。我認爲它使用反射來選擇正確的編輯器模板。情況並非如此嗎?就像我說的,我有布爾?模板,並正確呈現布爾值 - 它不會調用字符串模板。 – user949286
你有單獨的int模板嗎? –
不,我不知道。我不認爲我會需要一個,因爲我第一次創建了布爾?模板,一切都繼續有效。然後我創建了字符串模板,併發生此錯誤。也許我應該只是創建int模板,但我可能有很多其他類型,我希望它使用默認模板,因此我不必生成不必要的冗餘模板。 – user949286