为什么ASP.net MVC在Form.Request中放入以下内容

时间:2011-08-02 12:23:25

标签: asp.net asp.net-mvc

我的视图中有一行代码如下所示:

<button id="show-Lookup" class="inithide" name="show-Lookup">Lookup</button>  

当它在表单提交时被发送回控制器时崩溃,并出现以下错误: “从客户端show-Lookup =”

中检测到一个潜在危险的Request.Form值

当我在调试器中分析show-Lookup的值时,我看到以下内容: 的Request.Form [“显示,查找”]     查找

ASP.net MVC从哪里获得这个?这应该没有价值?

3 个答案:

答案 0 :(得分:2)

这与MVC无关;它是基本的HTML。 Anything with a name can be considered for inclusion in your form, subject to certain restrictions (see the spec)。如果您不希望它在表单中,请删除name

答案 1 :(得分:0)

在控制器上添加此属性

 [ValidateInput(false)]

我想建议一件事,如果您不确定自己在做什么,就不要使用上面的代码。上面的代码不会让服务器验证它从表单中收到的输入。

这意味着,如果用户表单中输入的名称类似于“alert('hacked')”,您的控制器将按原样接收该值。如果你只是将它添加到数据库中并将其显示在灾难的某个地方。用户可以键入完全限定的javascript来发出ajax请求。

解决此问题的另一种方法只是从按钮中移除属性名称,因为它无法解决任何问题。

问题: 当我在调试器中分析show-Lookup的值时,我看到以下内容:Request.Form [“show-Lookup”]查找 ASP.net MVC从哪里获得这个?这应该没有值?

您正在看到此值,因为您已将属性名称添加到按钮,因为您已添加该属性,浏览器也将该属性发送给服务器。

答案 2 :(得分:0)

随表单提交<button></button>。不同的浏览器对此略有不同 - IE发送开始和结束标记之间的任何值(“内容”按钮),而其他浏览器发送value属性。

另请注意,除非您指定按钮,否则按钮的行为会因浏览器而异。在IE中(9?之前),<button>元素是“按钮”类型,而在其他浏览器中它是“提交”。 (这也是W3C规范。)