HtmlHelper扩展名会改变传入的属性的值

时间:2013-04-08 20:04:09

标签: c# asp.net-mvc asp.net-mvc-3

我有一个html帮助器,以友好的方式显示文本框的电话号码。用法:

Html.PhoneNumberFor(m => m.PhoneNumber)

我希望它取一个像“1111111111”这样的数字并输出“(111)111-1111”。我已经尝试通过从html帮助扩展方法中的表达式中获取属性来更新html帮助器的viewdata,但这似乎不起作用。那么,任何人都知道如何更新表达式对象中属性的值?以下代码不起作用:

public static MvcHtmlString PhoneNumberFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, string>> expression, object htmlAttributes)
    {
        var value = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model as string;

        if (!string.IsNullOrEmpty(value) && value.Length == 10)
        {
            value = string.Format("({0}){1}-{2}", value.Substring(0, 3), value.Substring(3, 3), value.Substring(6));                

            var fieldName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
            helper.ViewData[fieldName] = value;

        }

        return helper.TextBoxFor(expression, htmlAttributes);           
    }

2 个答案:

答案 0 :(得分:0)

我会为此创建一个自定义的DisplayFormatAttribute,然后你只需将它应用于PhoneNumber属性。

答案 1 :(得分:0)

如果没有,这会对你有用吗请解释你需要什么才能让它发挥作用..

如果你想坚持使用字符串值作为输入

,这应该有效
var formattedPhone = 
    String.Format("{0:(###)###-####}", Convert.ToInt64("1111111111"));