2013-08-30 61 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方法应用规则之前。

相关问题