1

我有这个视图模型

public class FooBarViewModel
{
    public string Foo { get; set; }

    [AllowHtml]
    public string Bar { get; set; }
}

我不想在其中抛出带有 html的HttpRequestValidationExceptionif提交,而是向. 我怎么能那样做?.FooModelState

4

2 回答 2

1

您也可以使用属性装饰Foo属性[AllowHtml],并在控制器内部检查它是否包含 HTML,这将允许您向模型状态添加自定义错误。

于 2011-07-16T22:02:00.060 回答
0

异常将DefaultModelBinder在它调用的点内抛出ValueProvider.GetValue

要更改行为以捕获异常并将其转换为ModelState错误,您需要扩展或替换DefaultModelBinder.

一种可能性是覆盖BindModel, 并在它调用的地方GetValue

ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);

尝试捕获异常并调用bindingContext.ModelState.AddModelError.

问题在于它DefaultModelBinder非常复杂,因此您可能需要仔细考虑此类更改需要如何与模型绑定生态系统的其余部分进行交互。

于 2012-10-27T13:51:11.723 回答