2012-08-01 64 views
1

我遇到了HTML字符在文本字段和AutoPostBack中的问题。AutoPostBack和HTML编码

我有类似下面:

<asp:FormView ID="FormView1" runat="server" 
       DataKeyNames="ID" DataSourceID="SqlDataSource4" 
       ForeColor="#333333" DefaultMode="Edit" 
       HorizontalAlign="Center" Font-Size="X-Small" 
       Width="100%" OnDataBound="FormView1_DataBound"> 
     <asp:TextBox ID="fooTextBox" runat="server" 
        Width="100%" Rows="4" TextMode="MultiLine" 
        CssClass="tr4" Text='<%# Bind("foo") %>' AutoPostBack="true" 
        OnTextChanged="ChangedRecord" /> 
</asp:FormView> 

现在,当用户进入文本框像

< FOO>

它会抛出500由于一个错误到文本字段中的HTML字符。

如何在通过AutoPostBack发送之前对其进行管理?

+0

什么导致你的错误的ASP部分或背面 – 2012-08-01 04:01:26

+0

我相信它是AutoPostBack,因为向ChangedRecord方法(称为OnTextChanged)添加HttpUtility.HtmlEncode不编码HTML字符。看来AutoPostBack在这个ChangedRecord方法之前被调用? – joshschreuder 2012-08-01 04:04:13

回答

2

这是因为页的ValidateRequest财产(默认值是)。您可以关闭ValidateRequest,以便允许标记,脚本等(潜在的危险值)。

如果你的应用目标.net framework version 4.0然后添加下面的部分在web.config中:

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime requestValidationMode="2.0" /> 
</system.web> 
+0

理想情况下,我不想保留具有潜在危险的字符,而是在回发之前编码或删除它们。这可能吗? – joshschreuder 2012-08-01 04:06:24

+0

在提交数据之前,您可以使用jQuery或JavaScript'escape()'。 – adatapost 2012-08-01 04:12:43

+0

因为回发被自动调用,所以不起作用(http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.textbox.autopostback.aspx)。我仍然希望发生这种情况,但希望在发布之前将内容转义出来。 – joshschreuder 2012-08-01 04:16:23

0

如果您需要输入HTML/XML到文本框的处理它的最好的办法就是HTML编码您输入。 <foo>将成为&lt;foo&gt;这将使它安全的表单帖子。请记住,您需要在提交使用后解码。使用以下链接检查html编码。 http://www.opinionatedgeek.com/DotNet/Tools/HTMLEncode/Encode.aspx/

+0

我已经试过了,但是我需要一种在通过AutoPostBack实际编码输入之前捕获现有输入的方法。 – joshschreuder 2012-08-01 04:13:55

+0

那么我会建议一个javascript onchange或onblur函数在您键入或粘贴时查找html charaters的文本框中,并且应该用编码后的html替换。这将是额外的努力,但应该在编码之前捕捉输入。 – 2012-08-01 04:21:31