【发布时间】:2013-03-31 01:20:41
【问题描述】:
我有一个 html 助手,可以友好地显示文本框的电话号码。用法:
Html.PhoneNumberFor(m => m.PhoneNumber)
我希望它采用像“1111111111”这样的数字并输出“(111)111-1111”。我已经尝试通过从 html 助手扩展方法中的表达式中获取属性来更新 html 助手的视图数据,但这似乎不起作用。那么,有人知道如何更新表达式对象中的属性值吗?这是不起作用的代码:
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);
}
【问题讨论】:
-
例如更改您拥有
value.SubString(0,3)的代码并创建一个名为areacode的局部变量,然后对其他2 个SubStringValues 执行相同操作,并将它们作为参数传递给您的string.Format 方法 -
单步执行时,“value”变量具有正确的值。你的可能更具可读性,但我不确定它会如何解决我的问题..
-
你不能这样做
int valuePhone = 1111111111; var valuePhoneFrmt = string.Format("{0:(###)###-####}", valuePhone); -
就像我说的那样,这仍然无法解决文本框中的值没有被我在视图数据字典中设置的值更新的问题 helper.ViewData[fieldName] = value;。我还必须强制转换为不受欢迎的整数。
标签: c# asp.net-mvc asp.net-mvc-3