回到目錄
MVC4.0推出後,在模型驗證上有了一個新的改近,它支援前端驗證,即在使用者POST之前,如果驗證失敗,則Action(POST方式的)不會被執行,而直接停留在原視圖,這對于使用者體驗是好的,它就類似于ajax驗證一樣,不會将原頁重定向。
MVC4.0在view中引用了jqueryval檔案後,即可實作用戶端實時驗證
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
如果你不需要走JS方式驗證,還是使用原來的POST方法後再進行驗證的話,把上面那行删除即可,當然,MVC為我們提供的驗證展示可能不是我們想要的,它往往會将“驗證失敗的提示資訊”添加一個<span>然後為它加class,這可能并不是我們想要的,因為我們
的“錯誤提示”往往由前端開發人員提供的,是以,我們最需要的是“純文字”的錯誤提示,現在,我把MVC的ValidationMessageFor擴充方法進行了新的擴充,我叫它ValidationMessageTextFor,它會将模型裡的某個字段的驗證錯誤的消息進行“純文字”的輸出,不
會有任何HTML标記,這才是我們所需要的,它也有不足,那就是目前并不支援前端實時模型驗證!
ValidationMessageTextFor原代碼如下,供大家學習與研究:
namespace System.Web.Mvc.Html
{
/// <summary>
/// MVC中對HtmlHelper擴充方法
/// </summary>
public static class MvcHtmlExtensions
{
/// <summary>
/// 從ModelState中傳回指定鍵對應的驗證的錯誤消息
/// </summary>
/// <typeparam name="TModel"></typeparam>
/// <typeparam name="TProperty"></typeparam>
/// <param name="htmlHelper"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static MvcHtmlString ValidationMessageTextFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var fieldName = ExpressionHelper.GetExpressionText(expression);
var modelState = htmlHelper.ViewData.ModelState;
if (!modelState.Keys.Contains(fieldName))
return null;
if (modelState[fieldName].Errors.Count == 0)
return null;
IList<string> errList = new List<string>();
modelState[fieldName].Errors.ToList().ForEach(i =>
{
errList.Add(i.ErrorMessage);
});
return MvcHtmlString.Create(string.Join(",", errList));
}
}
}
現在輸出的錯誤消息就是純文字,如圖
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
