Каков стандартный синтаксис привязки данных 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"]) %>