我想重寫Html.TextBoxFor()與我自己的幫助具有完全相同的簽名(但當然不同的名稱空間) - 這是可能的,如果是這樣,如何?ASPNET MVC - 使用具有相同簽名的新助手重寫Html.TextBoxFor(model.property)?
原因是我在已存在的應用程序中有100多個視圖,並且我想要更改TextBoxFor的行爲,以便在屬性具有[StringLength(n)]時輸出maxLength = n屬性註解。
自動輸出maxlength = n的代碼在這個問題中:maxlength attribute of a text box from the DataAnnotations StringLength in Asp.Net MVC。但我的問題不是重複的 - 我想創建一個更通用的解決方案:DataAnnotaion自動流入html,而不需要編寫視圖的人額外編寫代碼。
在引用的問題中,您必須將每個Html.TexBoxFor更改爲Html.CustomTextBoxFor。我需要這樣做,以便現有的TextBoxFor()不需要改變 - 因此創建一個具有相同簽名的助手:改變助手方法的行爲,並且所有現有的實例將不加改變地工作(100 +視圖,至少500個TextBoxFor()s - 不想手動編輯)。
我試過這段代碼:(我需要重複它TextBoxFor的每個過載,但一旦根源問題得到解決,這將是微不足道的)
namespace My.Helpers
{
public static class CustomTextBoxHelper
{
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool includeLengthIfAnnotated)
{
// implementation here
}
}
}
但我得到一個編譯器錯誤Html.TextBoxFor()上的視圖:「該調用在以下方法或屬性之間不明確」(當然)。有沒有辦法做到這一點?
是否有替代方法可以讓我改變Html.TextBoxFor的行爲,以便已經使用它的視圖不需要改變?
Visual Studio的查找和替換是相當強大的。它可以用'Html.CustomTextBoxFor'只需點擊一下就可以代替'Html.TextBoxFor'解決方案中的所有事件!您不需要手動編輯任何文件以重命名方法。 – CoderDennis 2011-06-21 14:46:50