1

我想如何實現客戶端驗證潛在危險的request.form在asp.net mvc。客戶端驗證爲asp.net mvc「一個潛在危險的Request.Form ...

在這種情況下,我不想設置[ValidateInput(false)],並且向用戶顯示此錯誤消息頁面不方便用戶。就像[Required]屬性爲客戶端驗證所做的一樣。

我推測有一個內置函數,因爲它對我來說似乎是一個常見問題,但似乎我無法找到它。

+0

客戶端驗證需要客戶端代碼。我會推薦使用jQuery和jQuery Validate插件:http://jqueryvalidation.org/ – StaticVoid

+0

我知道可用的javascript客戶端驗證的廣泛範圍,但我在這裏面臨的問題不是重新發明輪子重寫與asp.net mvc潛在危險的request.form相匹配的驗證規則,既不限制輸入以允許字母數字只有 – stackdisplay

+0

談論客戶端驗證等同於此沒有意義,因爲這超出了簡單表單驗證。請求URL,Cookie等也通過ASP.NET請求驗證進行驗證,因此您可能必須實現自己的JavaScript,該JavaScript可以掛接到每個表單發佈,並在發送之前驗證整個HTTP請求。你確定這真的是你需要做的嗎?請求驗證是一項安全功能,而不是可用性驗證功能,因此請求驗證失敗應該被視爲例外而不是表單驗證錯誤。 –

回答

3

通過重寫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(); 
相關問題