<% # Eval ( "State" )%> или <% # DataBinder.Eval(Container.DataItem, "state" )%>

В чем разница между тем, что

<%# Eval("State") %>

на странице aspx по сравнению с

<%# DataBinder.Eval(Container.DataItem, "State") %>

на странице aspx?

Ответ 1

Eval ( "State" ) - упрощенная форма синтаксиса DataBinder.Eval(Container.DataItem, "State" ). Он работает только внутри элементов управления с привязкой к данным.

Для получения дополнительной информации см. документацию MSDN.

Ответ 2

Нет никакой разницы. Метод "Eval" является всего лишь ярлыком для метода DataBinder.Eval(Container.DataItem, "blah" ).

Ответ 3

Между обложками существует много различий между <%# Eval %> и <%# DataBinder.Eval %>, хотя в документации говорится, что с помощью Eval (TemplateControl.Eval, если быть точным) на самом деле вызывает DataBinder.Eval и что их задача состоит в том, чтобы выполнить точно такую ​​же работу.

Это правильно, но использование только Eval означает, что сам ASP.NET решает объект, привязанный к базе данных. Он делает это внутри со стеком, где элементы добавляются при вызове Control.DataBind(). Фокус в том, что это происходит только в том случае, если свойство Page элемента управления не имеет значения null в этой точке.

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

Способы привязки данных, такие как Eval(), XPath() и Bind(), могут использоваться только в контексте управления базой данных.

DataBinder.Eval по-прежнему работает в этих обстоятельствах, потому что вы предоставляете ему целевой объект вручную, поэтому ASP.NET не нуждается в разрешении самостоятельно.

Ответ 4

метод Eval - это всего лишь ярлык последнего

Ответ 5

Я видел следующий код

<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %>

Итак, я думаю, они немного отличаются.