HtmlHelper扩展修改传入属性的值
本文关键字:属性 扩展 修改 HtmlHelper | 更新日期: 2023-09-27 18:08:11
我有一个html帮助器以友好的方式显示文本框的电话号码。用法:
Html.PhoneNumberFor(m => m.PhoneNumber)
我想让它取一个像"1111111111"这样的数字,然后输出"(111)111-1111"。我已经尝试通过抓取html helper扩展方法中的表达式的属性来更新html helper的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);
}
我会为此创建一个自定义DisplayFormatAttribute,然后你只需要做的是将它应用于PhoneNumber属性。
如果不是,请解释一下你需要什么才能让它工作。
如果你想坚持使用字符串值作为输入,这应该可以工作
var formattedPhone =
String.Format("{0:(###)###-####}", Convert.ToInt64("1111111111"));