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