有时候MS 为我们做的太多,我们也很烦,毕竟有是时候希望简单一点,
前端的要求,需要贴上去的数据不要那些杂七杂八的标签,
原生的WebViewPage<T>.Html.ValidationMessageFor()
再生成后总会带有一个<span> 标签,我不想要
最后我还是加了一个扩展方法
public static class WebViewPageExtensions
{
/// <summary>
/// 指定表达式
/// </summary>
/// <typeparam name="TModel"></typeparam>
/// <typeparam name="TProperty"></typeparam>
/// <param name="webViewPage"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static string ValidationMessageFor<TModel, TProperty>(this WebViewPage<TModel> webViewPage, Expression<Func<TModel, TProperty>> expression)
{
//如果没有错误,那么就不显示
if (webViewPage.ViewData.ModelState.IsValid) return null;
var propertyName = ExpressionHelper.GetExpressionText(expression);
var modelState=webViewPage.ViewData.ModelState[propertyName];
StringBuilder stringBuilder = new StringBuilder();
foreach(var error in modelState.Errors)//把所有错误都打印出来
{
stringBuilder.AppendLine(error.ErrorMessage);
}
return stringBuilder.ToString();
}
}
这样用起来,还不是美滋滋.
下面贴下使用效果
@model MVCTest.Models.Form1
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<form action="@Url.Action("Index")" method="post">
<div>
@Html.TextBox("Name")
</div>
<div>
@Html.ValidationMessageFor(a => a.Name)
</div>
<div>
@this.ValidationMessageFor(a=>a.Name)
</div>
<div>
<input type="submit" />
</div>
</form>
</body>
</html>