加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何创建一个HTML Helper来扩展TextBoxFor()以添加CS

发布时间:2020-12-16 00:06:09 所属栏目:asp.Net 来源:网络整理
导读:如何创建一个HTML Helper来扩展TextBoxFor()以添加CSS样式? @Html.TextBoxFor(model = model.FirstName,new { @class = "txt" }) 解决方法 public static System.Web.Mvc.MvcHtmlString DtxTextBoxForTModel,TValue (this System.Web.Mvc.HtmlHelperTModel
如何创建一个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));
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读