Javascript打破< &安培; >在GridView编辑框中

时间:2011-07-28 08:42:42

标签: c# asp.net gridview updatepanel html-encode

我在UpdatePanel中有一个Asp.Net GridView。一切正常,除非其中一列包含<>等HTML特殊字符。 GridView绑定到List<Entity>,而Entity类的属性RegexSystem.Text.RegularExpressions.Regex

起初我有这个:

<asp:TemplateField HeaderText="RegEx">
    <ItemTemplate>
        <asp:Label ID="RegExLabel" runat="server" Text='<%#Eval("Regex") %>' 
                   ToolTip='<%#Eval("Regex") %>' Width="102px" CssClass="Wrap" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="RegExTextBox" runat="server" Text='<%#Eval("Regex") %>' 
                     Width="98px" />
    </EditItemTemplate>
</asp:TemplateField>

(?<capture>\d+)在未编辑时显示?\d+,编辑此行时出现脚本错误,编辑,更新和取消按钮不再起作用。

然后我在this question中尝试了答案并且有了这个:

<asp:TemplateField HeaderText="RegEx">
     <ItemTemplate>
          <asp:Label ID="RegExLabel" runat="server" 
                     Text='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>' 
                     ToolTip='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>'
                     Width="102px" CssClass="Wrap" />
     </ItemTemplate>
     <EditItemTemplate>
          <asp:TextBox ID="RegExTextBox" runat="server" 
                       Text='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>' 
                       Width="98px" />
     </EditItemTemplate>
</asp:TemplateField>

这稍微好一些,因为工具提示和非编辑版本正确显示,但是当我开始编辑时,我看到:(?&lt;capture&gt;\d+),HTML实体显示为原始。有没有人知道一种编码值的方法(停止脚本错误),同时仍然正确显示它们,而编辑时没有HTML实体处于原始状态?

1 个答案:

答案 0 :(得分:1)

<asp:TemplateField HeaderText="RegEx">
    <ItemTemplate>
        <asp:Literal Mode="Encode" ID="RegExLabel" runat="server" Text='<%#Eval("Regex") %>' 
                   ToolTip='<%#Eval("Regex") %>' Width="102px" CssClass="Wrap" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="RegExTextBox" runat="server" Text='<%#Eval("Regex") %>' 
                     Width="98px" />
    </EditItemTemplate>
</asp:TemplateField>

并在页面指令中添加此ValidateRequest="false"