爱上MVC~MVC4模型验证可以放在前端_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 爱上MVC~MVC4模型验证可以放在前端

爱上MVC~MVC4模型验证可以放在前端

 2015/4/3 11:28:53  张占岭  程序员俱乐部  我要评论(0)
  • 摘要:回到目录MVC4.0推出后,在模型验证上有了一个新的改近,它支持前端验证,即在用户POST之前,如果验证失败,则Action(POST方式的)不会被执行,而直接停留在原视图,这对于用户体验是好的,它就类似于ajax验证一样,不会将原页重定向。MVC4.0在view中引用了jqueryval文件后,即可实现客户端实时验证@sectionScripts{@Scripts.Render("~/bundles/jqueryval")}如果你不需要走JS方式验证
  • 标签:MVC

回到目录

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));

        }
    }
}

现在输出的错误消息就是纯文字,如图

QQ1s/nlyctJcbvoDTHHwGghujWsg3UuzITL3DkBszy8K5azZOf3TGliHLwq1jm325xGgUPNfDbTSOuVP96UGAPZo/hpY918NdO5r+3pRcJ0BQKaDf1LoEDWQuX0ABu3hamDUfTtvUgMAc9nP18dyZn3fTa20PimU7kgNAOzR/DXQWtL5qdDmCmoAYI92/A2jnSfywTpjN64GAF4Mv2gaoGpqAKBqagCgamoAoGpqAKBqagCgamoAoGrDNfDw3EVg4WYfJZQrqwaei8iCowaYQg2IFB81wBRqQKT4qAGmUAMixUcNMIUaECk+aoAp1IBI8VEDTKEGRIqPGmAKNSBSfNQAU6gBkeKjBphCDYgUn8Ea2OM3jXM29fDcxc9ffnvK3jP3slkn+EL1qC9dxzvN/xZ3a8nyv+atBkSKz/QayB+XnTMuXfj5y2+3xvTY2TQ4r7e3BjvKWdJ5a+ZqOTepARE5eIJ5vdvvIMofcw/PXfzHL3/TGsp//+5r+SM184A7537rn1OuBjaH3bepzGNrLdlcEo165tWAiOySwdP2YIZmdkDn4NsUQFwD+Q2Uf2vrANLlwTbjGgjutd3X5ocvXr+eHkPrYJqXRDnP/FzUgEjx2WMNBFOyNemaE7C18eZp9SHGX/4Gc6po+0CCGkg3+8Xr13Oe87iTFkINiBSfYHDv65Q8swbW3z6t3mH8ZQ7u1pl4zkML9tisgc5T+3Sn26uBwbrt2+C6qypmoQZEis+Uq4G4LVojrCV+UWi3GggeRXNh65NIrQme/7iCGtjhyAd3kT7zE58fNSAiz5/P/aJQZw0MDt/8qdq5vPVJpHSC7/C4Wq9lpY86syw7n3M1ICIHTDDgxs7ifdVAzjZHHXA6YTuLJz7s4BkY1VKDz1LnOn1L5u2AtRoQOYLsZSRlLk9rID3J3cuLQvGRjH04g8fQd6qe7newn8Y+57NTAyLFZ3C47KsGWtIXOtaHr4H0puBIOq9XgkeX84xtN9j8WkDfszT9eXgB1IBI8ckZLsE5bLpCzlA+XA3ER9KayJ1TeHA6d562Zw7xZg1kXg3ED2d2akCk+Cx2vlAENSBSfNQAU6gBkeKjBphCDYgUHzXAFGpApPioAaZQAyLFRw0wRVYNAAs3+yihXMM1AMARUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVVMDAFVTAwBVUwMAVRuugf84usz+pAMsR1YN/PmvfzsaagCgSQ0AVE0NAFRNDQBUTQ0AVE0NAFRNDQBUTQ0AVE0NAFRNDQBUTQ0AVE0NAFRNDQBUbW81cPHSK6tGfvvxH2ef+GoAYNB+amDTAe+8+96f//q3Kz/56Wq1+q///nC/4/u3H/9xL5tVAwBNe6iBzYC+eOmV7ZJtJezRO+++pwYA9m4PNbAZ0Onc3yzfzO7ti0Xb1TpfQWquuR36m5pJlwfbUQMAmQ5YA60x3Vy4eREp/Xl7VbHpgys/+Wl8NdC3HTUAkOkF1UDzPD09u2+u0HyrOa6BeDtqACDHHmpgc+be995AeimQvpfQGuu//fiPOVcDfdtRAwD59vNJoeZL9ptPCrVuaq2/OeXfrt98IWjTH3018M67773z7nvb0d+5HTUAkG9v3xtI38LdvkWcvsLTuf6fky8fNO/VfAmo+QJU53bUAEAm3yIGqJoaAKiaGgComhoAqJoaAKiaGgComhoAqJoaAKiaGgComhoAqJoaAKhaVg0cWWZ/0gGWY7gGADhiagCgamoAoGpqAKBqagCgamoAoGpqAKBq/wdDhje3fA3xcQAAAABJRU5ErkJggg==" alt="" />

 

回到目录

发表评论
用户名: 匿名