Chúng tôi thực sự chỉ gặp vấn đề tương tự. Chúng tôi đã kết thúc việc triển khai một phương thức mở rộng với các tham số quá tải, trong đó có một boolean cho biết chúng ta có muốn điều khiển bị vô hiệu hóa hay không. Chúng tôi chỉ thêm thuộc tính "đã tắt" khi thích hợp và để HtmlHelper cài sẵn xử lý việc nâng hạng nặng.
lớp mở rộng và phương pháp:
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;
public static class OurHtmlHelpers
{
public const string DisabledAttribute = "disabled";
public static MvcHtmlString TextBoxFor<TModel, TProp>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProp>> expression,
object htmlAttributes,
bool canEdit)
{
var htmlAttributeDictionary = SetDisabledAttribute(htmlAttributes, canEdit);
return htmlHelper.TextBoxFor(expression, htmlAttributeDictionary);
}
private static RouteValueDictionary SetDisabledAttribute(object htmlAttributes, bool canEdit)
{
var htmlAttributeDictionary = new RouteValueDictionary(htmlAttributes);
if (!canEdit)
{
htmlAttributeDictionary.Add(DisabledAttribute, DisabledAttribute);
}
return htmlAttributeDictionary;
}
}
Sau đó, bạn chỉ cần tham khảo lớp mới của bạn và gọi @Html.TextBoxFor(m => m.SomeValue, new { @class = "someClass" }, <Your bool value>)
Nó đáng chú ý là bạn phải xác định các phần mở rộng cho bất kỳ quá tải TextBoxFor bạn muốn sử dụng, nhưng nó có vẻ như một thương mại hợp lý. Bạn cũng có thể sử dụng hầu hết cùng một mã cho các HtmlHelpers khác mà bạn muốn thêm chức năng vào.
hoạt động, tôi nợ Bạn bia! Cảm ơn – Tony
Tôi sẽ chờ đợi nó xD –
đó là khá táo bạo:> nhưng tôi thích nó. Tuy nhiên, tôi đang thêm một biến thể (dễ vỡ hơn) của riêng mình – goofballLogic