9

我的问题希望非常直截了当。提交表单后,我想将所有具有无效字符(特别是 HTML)的属性(字段)标记为模型错误。我面临的问题是请求验证在模型绑定/ 验证之前启动,我得到 HTTP 500...我正在寻找的是如何“全局捕获请求验证异常并将它们显示为模型错误”。此外,我不想“剥离”HTML 标签,我想通知用户他们的输入无效。[AllowHtml]<httpRuntime requestValidationMode="2.0" />

我考虑过使用正则表达式验证属性来查找错误的输入,但正如我所提到的,ASP.NET MVC3 上的请求验证发生在模型绑定/验证之前,所以这是不行的......

可以在此处找到对请求验证的非常好的概述。

4

1 回答 1

10

我认为您唯一的目的是在模型绑定期间获取请求验证异常并将错误显示为模型状态错误。这是示例,

    using System.Web.Helpers;
    public class MyModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            try
            {
                return base.BindModel(controllerContext, bindingContext);
            }
            catch(HttpRequestValidationException ex)
            {
                var modelState = new ModelState();
                modelState.Errors.Add(ex.Message);
                var key=bindingContext.ModelName;
                var value = controllerContext.RequestContext.HttpContext.Request.Unvalidated().Form[key];
                modelState.Value = new ValueProviderResult(value, value,CultureInfo.InvariantCulture);
                bindingContext.ModelState.Add(key, modelState);
            }
            return null;
        }
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        ModelBinders.Binders.DefaultBinder = new MyModelBinder();
    }

这将添加在模型状态下进行请求验证的例外。对不起,如果我没有清楚地理解你的问题。

于 2012-02-13T17:14:02.633 回答