Tôi muốn ghi đè lên Html.TextBoxFor() với trình trợ giúp của chính tôi có chữ ký chính xác giống nhau (nhưng không gian tên khác nhau) - điều này có thể, và nếu có thì làm cách nào?ASPNET MVC - Ghi đè Html.TextBoxFor (model.property) với trình trợ giúp mới có cùng chữ ký?
Lý do cho điều này là tôi có hơn 100 lượt xem trong một ứng dụng đã tồn tại và tôi muốn thay đổi hành vi của TextBoxFor để nó xuất ra thuộc tính maxLength = n nếu thuộc tính có [StringLength (n)] chú thích.
Mã để tự động xuất maxlength = n là trong câu hỏi này: maxlength attribute of a text box from the DataAnnotations StringLength in Asp.Net MVC. Nhưng câu hỏi của tôi không phải là một bản sao - tôi đang cố gắng tạo một giải pháp chung chung hơn: nơi DataAnnotaion tự động chuyển vào html mà không cần mã bổ sung bởi người viết chế độ xem.
Trong câu hỏi được tham chiếu, bạn phải thay đổi mọi Html.TexBoxFor đơn lẻ thành Html.CustomTextBoxFor. Tôi cần phải làm như vậy để TextBoxFor() hiện tại không cần phải thay đổi - do đó tạo ra một helper có cùng chữ ký: thay đổi hành vi của phương thức helper, và tất cả các cá thể hiện tại sẽ hoạt động mà không có bất kỳ thay đổi nào (100 + lượt xem, ít nhất 500 TextBoxFor() s - không muốn chỉnh sửa thủ công).
Tôi đã thử mã này: (Và tôi cần phải lặp lại nó cho mỗi tình trạng quá tải của TextBoxFor, nhưng một khi vấn đề gốc được giải quyết, đó sẽ là tầm thường)
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
}
}
}
Nhưng tôi nhận được một lỗi biên dịch trong chế độ xem trên Html.TextBoxFor(): "Cuộc gọi không rõ ràng giữa các phương thức hoặc thuộc tính sau" (tất nhiên). Có cách nào để làm điều này không?
Có cách tiếp cận thay thế nào cho phép tôi thay đổi hành vi của Html.TextBoxFor, sao cho các chế độ xem đã sử dụng không cần phải thay đổi?
Tìm và thay thế của Visual Studio khá mạnh mẽ. Nó có thể thay thế tất cả các lần xuất hiện trong Giải pháp 'Html.TextBoxFor' của bạn bằng' Html.CustomTextBoxFor' chỉ bằng một cú nhấp chuột! Bạn không bao giờ cần chỉnh sửa thủ công bất kỳ tệp nào để đổi tên phương thức. – CoderDennis