Как использовать HtmlEncode с TemplateFields, Привязкой данных и GridView

Это просто предупреждение, в котором вам предлагается начать использовать новые методы подключения к вашему db, такие как объекты pdo

http://code.tutsplus.com/tutorials/php-database -access-are-you-doing-it-correct - net-25338

Руководство находится здесь

http: //www.php. нетто / ручной / EN / book.pdo.php

23
задан Eddie 17 March 2009 в 19:53
поделиться

4 ответа

Кавычка от http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx

Там isn’t Связывать метод в ASP.NET. Когда ASP.NET анализирует Ваш файл и видит, что Вы используете

, он генерирует некоторый специальный код для него. Когда Вы используете, это не реальный вызов функции. Если ASP.NET анализирует код и обнаруживает оператор Bind (), он разделяет оператор на две части. Первая часть является односторонней частью привязки данных, которая заканчивает тем, что была только что регулярной Оценкой () вызов. Вторая часть является обратной частью, которая обычно является некоторым кодом вроде "имени строки = TextBox1. Текст", который захватывает значение назад из того, где это было связано. Однако, потому что ASP.NET должен проанализировать операторы Bind (), двухсторонняя привязка данных doesn’t поддерживают что-либо кроме, Связывают (). Например, следующий синтаксис недопустим, потому что он пытается вызвать произвольный код, и использование Связывают () одновременно:

единственные форматы, поддерживаемые в двухсторонней привязке данных, Связывают ("поле") и Связывают ("поле", "строка формата {0}").

Вы могли использовать Оценку вместо, Связывают в Вашем EditItemTemplate. Также необходимо бросить для строкового представления:

<asp:Label ID="LabelDescription" 
           runat="server" 
           Text='<%# System.Web.HttpUtility.HtmlEncode((string)Eval("Description")) %>' />
17
ответ дан Darin Dimitrov 29 November 2019 в 01:02
поделиться

Свяжите (), используется для Двухсторонняя Привязка данных , чтобы это работало, необходимо будет использовать событие RowUpdating gridview.

void GridView_RowUpdating(Object sender, GridViewUpdateEventArgs e)
{
    foreach (DictionaryEntry entry in e.NewValues)
    {
        e.NewValues[entry.Key] = System.Web.HttpUtility.HtmlEncode(entry.Value.ToString());
    }
}
2
ответ дан Phaedrus 29 November 2019 в 01:02
поделиться

Но будьте осторожны, если вы используете следующий код из Phaedrus и у вас есть колонка с чекбоксом!

void GridView_RowUpdating(Object sender, GridViewUpdateEventArgs e)
{
    foreach (DictionaryEntry entry in e.NewValues)
    {
        e.NewValues[entry.Key] = System.Web.HttpUtility.HtmlEncode(entry.Value.ToString());
    }
}

Потому что entry.Value.ToString() сделает true из Checkbox в True и тогда вы не сможете сохранить его в поле базы данных!

0
ответ дан 29 November 2019 в 01:02
поделиться

Как уже объяснил Дарин Димитров, вы не можете использовать Bind в качестве параметра функции. Итак, Text = '<% # System.Web.HttpUtility.HtmlEncode (Bind ("Description"))%>' невозможно. С другой стороны, обычно здесь нет необходимости использовать HtmlEncode, потому что вы будете использовать Bind с элементом управления, который позволяет изменять данные, например, вместе с TextBox (как в примере вашего EditItemTemplate). Но TextBox кодируется автоматически, поэтому вы можете безопасно вызвать Bind без необходимости HtmlEncode:

<EditItemTemplate>
    <asp:TextBox ID="TextBoxDescription" runat="server"
                 Text='<%# Bind("Description") %>'
                 ValidationGroup="EditItemGrid"
                 MaxLength="30" />
    <asp:Validator ... />
</EditItemTemplate>

Если TextBox не будет кодировать автоматически с помощью Bind, будет огромной дырой в безопасности ] (если вы не уверены, что ваши данные можно безопасно преобразовать в HTML без кодирования).

Но автоматическое кодирование НЕ относится, например, к этикетке.Хотя вы также можете использовать Bind в свойстве Text метки, вывод метки НЕ кодируется автоматически - причина, по которой использование Bind с меткой не является хорошей практикой. , поскольку вы не можете кодировать текст метки с помощью Bind . Вместо этого используйте Eval и оберните его в HtmlEncode, как вы это сделали в своем ItemTemplate: Text = '<% # System.Web.HttpUtility.HtmlEncode ((string) Eval ("Description")) %> '

8
ответ дан 29 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: