2012-08-01 32 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