我的 Controller 中有这段代码:
[HttpGet]
public ActionResult Register(UserRegistrationModel model)
{
return View();
}
我喜欢这样做的原因是,Register 页面可以预先填充来自其他页面生成的查询字符串的值。
问题是当我的 View 被渲染时,它会显示验证错误......有没有办法绕过它?
最佳答案
快速回答:尝试在“GET”操作方法上使用 [ValidateInput(false)]
更新:
使用 asp.net 4,要让框架确认 ValidateInput 属性,您还需要在 web.config 中配置验证模式。
将以下设置为 <system.web>
的子项元素:
<httpRuntime requestValidationMode="2.0"/>
为什么在您的“GET”操作方法中有一个 ViewModel?
利用默认模型绑定(bind)器。
例如,我们有子操作返回部分 View ,这些 View 绑定(bind)到复杂的 ViewModel 设置,我们不想为每个子操作显式实例化和重建 ViewModel。
例如,订单页面的编辑页面采用 EditOrderViewModel,它继承 BaseUserViewModel,而 BaseUserViewModel 又包含用户特定的显示数据(用户名、购物车商品计数等)。
所以返回 Edit View 的操作方法如下所示:
[ValidateInput(false)]
[HttpGet]
public ViewResult Edit(EditOrderViewModel editOrderVm)
{
...
return View('Edit', editOrderVm );
}
现在只要对该子操作方法的请求以某种方式包含 BaseUserViewModel 的属性(例如,通过 Cookies、Form 和 QueryString 属性),那么默认模型绑定(bind)器将实例化并使用所有基本 View 模型数据填充 EditOrderViewModel。
然而,当我们第一次加载这个页面时,我们不希望验证消息以用户还没有机会编辑的形式出现......
因此,我们关闭“GET”请求的模型验证 > 只需确保您验证“POST”请求!
关于.net - 绕过获取请求的 MVC 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066043/