2013-08-30 83 views
2

我不想禁用驗證,但向用戶顯示消息會很好。雖然我認爲用戶在文本字段中包含&#的合法需求是不太可能的,但我可以看到有人在自由文本字段中輸入了一個以<開頭的東西。向MVC中的控制器發送失敗的請求驗證

有沒有辦法檢測到將會拋出一個驗證異常,而是將它顯示爲驗證消息?

+0

您可以在您的動作上使用'[ValidateInput(false)]',然後使用'HttpUtility.HtmlEncode()'在您的控制器或視圖中對輸入進行編碼。這樣您就不必擔心驗證輸入。 – Oliver

+0

@Oliver謝謝,但這不實際。我們有一個非常大的應用程序與很多屏幕,我不想爲每個單獨的方法做到這一點。 – Sam

+0

好吧,在這種情況下,這裏有一些很好的建議:http://stackoverflow.com/questions/204646/how-to-validate-that-a-string-doesnt-contain-html-using-c-sharp – Oliver

回答

0

下面是我解決這個問題的方式:

  1. 創建一個驗證規則,說potentiallyDangerousRequestRule

    var potentiallyDangerousRequestRegex = /[<>]|&#/, // <, >, &# 
        potentiallyDangerousRequestErrorMessage = 'The error message'; 
    
    $.validator.addMethod('potentiallyDangerousRequestRule', function (value) { 
        if (value == '') 
         return true; 
        return !potentiallyDangerousRequestRegex.test(value); 
    }, potentiallyDangerousRequestErrorMessage); 
    
    $.validator.unobtrusive.adapters.addBool('potentiallyDangerousRequestRule'); 
    
  2. 呼叫validate方法form元素要驗證:

    $('form').validate({errorClass: 'input-validation-error'}); 
    
  3. 規則加入的元素,例如所有文字輸入和文字區域:

    $('input:text, textarea').each(function() { 
        $(this).rules('add', { potentiallyDangerousRequestRule: true }); 
    }); 
    

確保您調用形式validate方法應用規則之前。

相關問題