Theo dõi về câu trả lời mattytommo, điều này hoạt động tuyệt vời nhưng chỉ có một vấn đề nhỏ khi được sử dụng với các đối tượng phức tạp, chẳng hạn như nếu bạn đang sử dụng mã này cho một tài sản bên trong một EditorTemplate.
Thay vì
var data = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
string propertyName = data.PropertyName;
Nếu sử dụng MVC4, bạn có thể thay đổi nó để
var propertyName = helper.NameFor(expression);
hoặc cho MVC3 và dưới
var propertyName = expression.Body.ToString();
propertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
if (!string.IsNullOrEmpty(helper.ViewData.TemplateInfo.HtmlFieldPrefix))
propertyName = string.Format("{0}.{1}", helper.ViewData.TemplateInfo.HtmlFieldPrefix, propertyName);
Full mã:
public static MvcHtmlString MyHelperFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, object htmlAttributes = null)
{
var propertyName = expression.Body.ToString();
propertyName = propertyName.Substring(propertyName.IndexOf(".") + 1);
if (!string.IsNullOrEmpty(helper.ViewData.TemplateInfo.HtmlFieldPrefix))
propertyName = string.Format("{0}.{1}", helper.ViewData.TemplateInfo.HtmlFieldPrefix, propertyName);
TagBuilder span = new TagBuilder("span");
span.Attributes.Add("name", propertyName);
span.Attributes.Add("data-something", propertyName);
if (htmlAttributes != null)
{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
span.MergeAttributes(attributes);
}
return new MvcHtmlString(span.ToString());
}
Điều này sẽ được thêm vào bên trong một lớp tĩnh dưới không gian tên * System.Web.Mvc.Html *. – BornToCode
@BornToCode Bạn biết đấy, tôi thích phần mở rộng được viết dưới không gian tên của kiểu mà chúng tham chiếu, nếu không các nhà phát triển khác không bao giờ sử dụng chúng nếu họ không biết chúng vì chúng cần biết về chúng và không gian tên mà chúng sống để thêm tham chiếu và sử dụng nó. – mattytommo
Câu hỏi được yêu cầu cho dữ liệu-something = "MailID" nơi bạn đặt nó thành "cái gì đó".Ví dụ này cần hiển thị cách nhận giá trị của biểu thức, không chỉ tên của thuộc tính. – xr280xr