Asp.net
如何創建 HTML Helper 來擴展 TextBoxFor() 以添加 CSS 樣式?
如何創建 HTML Helper 來擴展 TextBoxFor() 以添加 CSS 樣式?
@Html.TextBoxFor(model => model.FirstName, new { @class = "txt" })
public static System.Web.Mvc.MvcHtmlString DtxTextBoxFor<TModel, TValue> (this System.Web.Mvc.HtmlHelper<TModel> html, System.Linq.Expressions.Expression<System.Func<TModel, TValue>> expression, System.Collections.Generic.IDictionary<string, object> htmlAttributes = null, bool readOnly = false) { if (htmlAttributes == null) { htmlAttributes = new System.Collections.Generic.Dictionary<string, object>(); } System.Web.Mvc.ModelMetadata oModelMetadata = System.Web.Mvc.ModelMetadata.FromLambdaExpression(expression, html.ViewData); if (oModelMetadata == null) { if (readOnly) { if (htmlAttributes.ContainsKey("readonly") == false) { htmlAttributes.Add("readonly", "read-only"); } } } else { if (htmlAttributes.ContainsKey("placeholder") == false) { string strHtmlFieldName = System.Web.Mvc.ExpressionHelper.GetExpressionText(expression); string strLabelText = oModelMetadata.DisplayName ?? oModelMetadata.PropertyName ?? strHtmlFieldName.Split('.').Last(); if (string.IsNullOrEmpty(strLabelText) == false) { htmlAttributes.Add("placeholder", strLabelText); } } if ((readOnly) || (oModelMetadata.IsReadOnly)) { if (htmlAttributes.ContainsKey("readonly") == false) { htmlAttributes.Add("readonly", "read-only"); } } } htmlAttributes.Add("class", "form-control"); System.Linq.Expressions.MemberExpression oMemberExpression = expression.Body as System.Linq.Expressions.MemberExpression; if (oMemberExpression != null) { System.ComponentModel.DataAnnotations.StringLengthAttribute oStringLengthAttribute = oMemberExpression.Member.GetCustomAttributes (typeof(System.ComponentModel.DataAnnotations.StringLengthAttribute), false) .FirstOrDefault() as System.ComponentModel.DataAnnotations.StringLengthAttribute; if (oStringLengthAttribute != null) { if (htmlAttributes.ContainsKey("maxlength") == false) { htmlAttributes.Add("maxlength", oStringLengthAttribute.MaximumLength); } } } return (html.TextBoxFor(expression, htmlAttributes)); }
您只需要在以下位置創建一個擴展方法
HtmlHelper:public static class MyHtmlHelpers { public static MvcHtmlString MyTextBoxFor<TModel, TProperty>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) { return helper.TextBoxFor(expression, new { @class = "txt" }); } }然後在您看來,您可以將其用作:
@Html.MyTextBoxFor(model => model.FirstName)注意:不要忘記您的視圖
@using的名稱空間。MyHtmlHelpers