新建一个MVC3空白项目,添加一个Controller,为Index方法添加一个视图,在视图中只写下一行代码:
@Html.TextBox("txtEmail", "", new { onclick = "alert('abc')" })
运行后,查看网页源代码,生成的HTML是这样的:
<input id="txtEmail" name="txtEmail" onclick="alert('abc')" type="text" value="" />
把'编码成了' 这导致onclick方法直接失效。
把项目拷至别的电脑上测试生成的都是正确的结果,但在我电脑上生成的是上面的结果,这是不是MVC3的一个BUG? 另外,我新建了一个MVC4项目,也有这个问题。
如果不是bug,那又是什么原因造成的呢?操作系统是正版windows 8 专业版,环境是Visual Studio Ultimate 2012,版本11.0.60610.01 Update 3
项目地址:http://pan.baidu.com/share/link?shareid=2762057868&uk=2047611729&qq-pf-to=pcqq.c2c
会自动编码,采用如下写法即可:
@Html.TextBox("txtEmail", "", new { onclick = Html.Raw("alert('abc')") })
奇怪,我没重现你的问题,mvc3,不管加不加Html.Raw,都没被编码。
@幻天芒: 首先谢谢你的回答。Html.Raw方法我早就试过了,还是会被编码成'
@nocture: 我的好奇的是,引发这个问题的条件~
@幻天芒: 虽然会把'号编码成'但并不影响方法的正常运行
@nocture: 这样也算合理。
并不是bug,而是为了防止注入攻击而做的防范。
你可以试试把'abc'放到一个变量中