GridView и HTML-кодирование - PullRequest
       2

GridView и HTML-кодирование

1 голос
/ 22 февраля 2011

Недавно я обновил веб-сайт клиента до .NET 4, и в ходе этого процесса мы обнаружили, что теперь значения столбцов GridView автоматически кодируются в формате HTML.

Они широко используют строки HTML в своем коде, поэтому мы должны отключить это. Я знаю, что одно решение будет проходить через каждый столбец и добавлять HtmlEncode = "false". Мой вопрос - есть ли способ установить это значение по умолчанию для всех столбцов GridView в этом приложении?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 03 сентября 2014

Я нашел это решение, чтобы решить эту проблему.

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
               for (int i = 0; i < e.Row.Cells.Count; i++) 
               {
                   string encoded = e.Row.Cells[i].Text;
                   e.Row.Cells[i].Text = Context.Server.HtmlDecode(encoded);
               }
        }
    }
0 голосов
/ 17 января 2019

Вы также можете создать класс, расширяющий GridView, чтобы сделать это

[ToolboxData("<{0}:DecodedGridView runat='server'>")]
public class DecodedGridView : GridView
{
    protected override void Render(HtmlTextWriter writer)
    {
        for (var i = 0; i < Rows.Count; i++)
        {
            for (var j = 0; j < Rows[i].Cells.Count; j++)
            {
                if (Rows[i].RowType == DataControlRowType.DataRow
                    && !(((DataControlFieldCell)Rows[i].Cells[j]).ContainingField is CommandField))
                {
                    var encoded = Rows[i].Cells[j].Text;
                    Rows[i].Cells[j].Text = Context.Server.HtmlDecode(encoded);
                }
            }
        }
        base.Render(writer);
    }
}

Затем вы можете просто изменить GridView так, чтобы вы хотели удалить кодирование HTML.

Просто объявите сборку аналогичным образом:

<%@ Register TagPrefix="MyUI" Namespace="MyProject.UI" Assembly="MyProject" %>

Затем вызовите GridView так:

<MyUI:DecodedGridView ID="MyTableWithHtml" runat="server">
    <!-- All the normal GridView stuff -->
</MyUI:DecodedGridView>
0 голосов
/ 23 февраля 2011

Я не думаю, что есть какой-либо способ сделать это по умолчанию, так как это было введено в качестве меры безопасности по умолчанию, так что разработчики должны рассмотреть возможность его отключения.

Чтобы обойти это, вам нужно было бы отключить его столбец за столбцом или вы могли бы унаследовать новый элемент управления от GridView и установить для каждого столбца значение по умолчанию false. Затем вы можете просто выполнить поиск и заменить GridView на новый элемент управления. Я не рекомендовал бы этот метод все же.

Лучше всего опросить каждый столбец в приложении и отключить его. Это безопаснее и заставляет вас задуматься о том, где вы хотите открыть дверь для возможности внедрения HTML / javascript. Лучше безопасно, чем потом сожалеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...