2
我不想禁用驗證,但向用戶顯示消息會很好。雖然我認爲用戶在文本字段中包含&#的合法需求是不太可能的,但我可以看到有人在自由文本字段中輸入了一個以<開頭的東西。向MVC中的控制器發送失敗的請求驗證
有沒有辦法檢測到將會拋出一個驗證異常,而是將它顯示爲驗證消息?
我不想禁用驗證,但向用戶顯示消息會很好。雖然我認爲用戶在文本字段中包含&#的合法需求是不太可能的,但我可以看到有人在自由文本字段中輸入了一個以<開頭的東西。向MVC中的控制器發送失敗的請求驗證
有沒有辦法檢測到將會拋出一個驗證異常,而是將它顯示爲驗證消息?
下面是我解決這個問題的方式:
創建一個驗證規則,說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');
呼叫validate
方法form
元素要驗證:
$('form').validate({errorClass: 'input-validation-error'});
規則加入的元素,例如所有文字輸入和文字區域:
$('input:text, textarea').each(function() {
$(this).rules('add', { potentiallyDangerousRequestRule: true });
});
確保您調用形式validate
方法應用規則之前。
您可以在您的動作上使用'[ValidateInput(false)]',然後使用'HttpUtility.HtmlEncode()'在您的控制器或視圖中對輸入進行編碼。這樣您就不必擔心驗證輸入。 – Oliver
@Oliver謝謝,但這不實際。我們有一個非常大的應用程序與很多屏幕,我不想爲每個單獨的方法做到這一點。 – Sam
好吧,在這種情況下,這裏有一些很好的建議:http://stackoverflow.com/questions/204646/how-to-validate-that-a-string-doesnt-contain-html-using-c-sharp – Oliver