天天看點

愛上MVC~MVC4模型驗證可以放在前端

回到目錄

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

支付寶掃一掃,為大叔打賞!

愛上MVC~MVC4模型驗證可以放在前端