1
我想如何實現客戶端驗證潛在危險的request.form在asp.net mvc。客戶端驗證爲asp.net mvc「一個潛在危險的Request.Form ...
在這種情況下,我不想設置[ValidateInput(false)]
,並且向用戶顯示此錯誤消息頁面不方便用戶。就像[Required]
屬性爲客戶端驗證所做的一樣。
我推測有一個內置函數,因爲它對我來說似乎是一個常見問題,但似乎我無法找到它。
我想如何實現客戶端驗證潛在危險的request.form在asp.net mvc。客戶端驗證爲asp.net mvc「一個潛在危險的Request.Form ...
在這種情況下,我不想設置[ValidateInput(false)]
,並且向用戶顯示此錯誤消息頁面不方便用戶。就像[Required]
屬性爲客戶端驗證所做的一樣。
我推測有一個內置函數,因爲它對我來說似乎是一個常見問題,但似乎我無法找到它。
通過重寫DefaultModelBinder.BindModel
方法,您可以在模型綁定期間捕獲HttpRequestValidationException
。
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
try
{
return base.BindModel(controllerContext, bindingContext);
}
catch (HttpRequestValidationException)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, "Illegal Html characters...");
return null;
}
}
在您的控制器操作中,您現在可以檢查模型是否無效並重新顯示適當的視圖。 jQuery不顯眼的驗證應該照顧其餘的。
[HttpPost]
public virtual ActionResult Edit(ViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
}
如果您還沒有自定義DefaultModelBinder
你必須確保它註冊在應用程序啓動。
ModelBinders.Binders.DefaultBinder = new CustomDefaultModelBinder();
客戶端驗證需要客戶端代碼。我會推薦使用jQuery和jQuery Validate插件:http://jqueryvalidation.org/ – StaticVoid
我知道可用的javascript客戶端驗證的廣泛範圍,但我在這裏面臨的問題不是重新發明輪子重寫與asp.net mvc潛在危險的request.form相匹配的驗證規則,既不限制輸入以允許字母數字只有 – stackdisplay
談論客戶端驗證等同於此沒有意義,因爲這超出了簡單表單驗證。請求URL,Cookie等也通過ASP.NET請求驗證進行驗證,因此您可能必須實現自己的JavaScript,該JavaScript可以掛接到每個表單發佈,並在發送之前驗證整個HTTP請求。你確定這真的是你需要做的嗎?請求驗證是一項安全功能,而不是可用性驗證功能,因此請求驗證失敗應該被視爲例外而不是表單驗證錯誤。 –