经过大量研究,我得出的结论是validation被深度集成到默认模型绑定器中,而ValidateInput属性基本上被MVC忽略了。我会注意到在 web.config 中使用以下内容
<system.Web>
...
<httpRuntime requestValidationMode="2.0"/>
有时会纠正这种情况,但有时不会。我注意到这个设置与 'ValidateInput' 属性相结合只是间歇性地受到尊重,这使得它在 IMO 中毫无用处。最后我想出了一个动作过滤器,定义如下:
public class ClearModelErrorsAttribute : ActionFilterAttribute
{
// ---------------------------------------------------------------------------------------
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ModelStateDictionary msd = filterContext.Controller.ViewData.ModelState;
foreach (var item in msd.Values)
{
item.Errors.Clear();
}
}
}
您可以看到它正在强力删除所有错误(由于无法关闭验证),这适用于我的特定场景。显然,这不是最强大的解决方案(也是一种 hack),但可以轻松修改它以适用于更具体的场景。
我的动作的新签名是这样的:
[HttpPost]
[ValidateAntiForgeryToken]
[ClearModelErrors]
public ActionResult AddNewItems(AddNewItemsModel model, string postType)
{ ... }
我已经从上面提到的 web.config 中删除了这些项目。