Разрыв Javascript на <&> в окне редактирования GridView - PullRequest
1 голос
/ 28 июля 2011

У меня есть Asp.Net GridView внутри UpdatePanel.Все работает нормально, за исключением случаев, когда один из столбцов содержит специальные символы 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+, когда не редактируется, и при редактировании этой строки я получил ошибку сценария, и кнопки редактирования, обновления и отмены больше не работают.

Затем я попытался ответить на вопрос в этом вопросе и получил следующее:

<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 Ответ

1 голос
/ 28 июля 2011
<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"

...