我在UpdatePanel中有一个Asp.Net GridView。一切正常,除非其中一列包含<
和>
等HTML特殊字符。 GridView绑定到List<Entity>
,而Entity类的属性Regex
是System.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>
这稍微好一些,因为工具提示和非编辑版本正确显示,但是当我开始编辑时,我看到:(?<capture>\d+)
,HTML实体显示为原始。有没有人知道一种编码值的方法(停止脚本错误),同时仍然正确显示它们,而编辑时没有HTML实体处于原始状态?
答案 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"