我有一个ASP.Net MVC 3页面,其中有一个
Html.TextAreaFor控件,请参见下面的代码.如果我尝试将页面提交到http post动作,其中包含尖括号的文本,如:< test>,我得到一个黄色错误屏幕说:
A potentially dangerous Request.Form value was detected from the
client (RequestText=””).
我不明白为什么我得到这个,因为我发现an article by Scott Guthrie说新的<%:%> .Net 4中的语法,将自动HtmlEncode的元素.由于我使用<%:%> Html.TextAreaFor控件的语法,我以为会自动处理这个,并将尖括号转换为正确的“& lt”;和“& gt”字符串.
<% using (Html.BeginForm()) { %> <%: Html.ValidationSummary() %> <h2>Enter a description of the support needed</h2> <%: Html.TextAreaFor( m => m.RequestText,4,90,null) %> <input type="submit" value="Submit" /> <% } %>
解决方法
基本上现在,您正在输出的TextAreaFor的内容进行编码.这并不能帮助您,因为您正在尝试处理输入
如果您想提交“潜在的危险”内容,您还需要
1)使用[AllowHtml]装饰viewmodel中的RequestText属性. (优选的)
[AllowHtml] public string RequestText { get; set; }
2)禁用validateRequest
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime requestValidationMode="2.0" /> </system.web>
然后,您必须确保在将数据提交给您的存储库或数据库之前,正确地将数据和/或编码到控制器中.