2011-09-07 84 views
2

显示错误消息“有潜在危险的Request.Form值”对用户有一吨的这个特定的异常问题,但我找不到任何会适合我的需要。我不想禁用验证,也不想手动转义每个表单输入值。如何在ASP.NET MVC 3

是否有以相同的方式来显示此错误消息给用户作为ASP.NET MVC通知的形式不提供所需的值的用户的方法吗?我认为这将是处理这种错误的最简单的方法。

+0

你使用jQuery?没有标签,但我能想到的解决方案的客户端,将可能工作 – hunter

+0

我可以使用jQuery,但不希望为他们写自己的验证逻辑,因为如果某种新的潜在危险值的验证被添加到ASP.NET MVC的,它会从我的实现中丢失。 –

+0

另外,总有一种可能性,有人在没有JavaScript支持的情况下使用我的网站,他们会被发送到一个通用的“内部服务器错误”页面,它不会告诉他们任何东西。 –

回答

1

这个错误只是ASP.NET中的一个安全网;一旦你检查你正在编码你的文本,微软会希望你禁用这个错误。

这不是有关手动逸出每个输入表格值。这是关于HTML编码呈现给页面的所有面向用户的文本。只是在表单中输入的文本经常显示回用户。

例如,字符串"My age is > 21 & < 90"不是有效的HTML,并且不会正确显示给用户(这可能会在跨站点脚本攻击中被滥用)。如果您显示的任何字符串不是有效的HTML,那么您的已将对其进行HTML编码。幸运的是,在MVC中有很多简单的方法可以做到这一点(使用<%: %>的操作符就是其中之一)。如果您正确地执行此操作,则无需启用此错误。

对不起,我知道这是不是你要的答案,但我相信保持开启这个错误仅仅是对用户不友好的原因是多方面的。

+0

这为我澄清了它。我没有意识到这只是一个安全网。 –

3
$("form").submit(function(e){ 
    var invalid = $("form").find("input:text,input:hidden,textarea").filter(function() { 
     var value = $(this).val(); 
     var encoded = $("<div>").html(value).text(); 
     return value != encoded; 
    }).length > 0; 

    if (invalid) 
    { 
     e.preventDefault(); 
     //show validation message 
    } 
} 
+0

这工作得很好;谢谢! – GendoIkari