Каков стандартный синтаксис привязки данных ASP.net?

Введение Microsoft в привязку данных с использованиемasp:Repeater control дает синтаксис для получения значения:

<b><%# DataBinder.Eval(Container.DataItem, "orderid") %></b>

Этот синтаксис повторяется в других введениях в ASP.net Repeater контроль:

<a href="<%# DataBinder.Eval(Container.DataItem, "URL") %>">...</a>

Но я помню, что этот синтаксис был "плохим" и "неправильным". Из документации MSDNDataBinder.Eval я вижу:

Заметка

Поскольку этот метод выполняет оценку с поздним связыванием, используя отражение во время выполнения, он может привести к заметному снижению производительности по сравнению со стандартным синтаксисом привязки данных ASP.NET.

(выделены слова)

Так что это объясняет, почему у меня была память о Evalэто плохо ". Но что такое " стандартный синтаксис привязки данных ASP.NET "?

Бонус Чтение

3 ответа

Решение

Я думаю, что вы можете просто выполнить приведение, чтобы избежать штрафа за "позднюю привязку":

<%# (((System.Data.DataRowView)Container.DataItem)["URL"]) %>

Теперь предположим, что вы увеличиваете производительность на х%. Стоит ли это вашего приложения? Компромисс (на мой взгляд) меньше читаемости.

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

Если вам просто нужно отображение данных только для чтения, вы можете рассмотреть цикл foreach или DataReader для анализа данных в необработанном HTML-формате в stringBuilder, а затем сбросить StringBuilder в литерал.

Эта страница MSDN описывает стандартный синтаксис привязки данных следующим образом:

Например, в следующем фрагменте кода целое число отображается в виде строки валюты. При использовании стандартного синтаксиса привязки данных ASP.NET сначала необходимо привести тип строки данных, чтобы извлечь поле данных IntegerValue. Далее это передается в качестве аргумента методу String.Format:

<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %> 
Другие вопросы по тегам