В чем разница между тем, что
<%# Eval("State") %>
на странице aspx
по сравнению с
<%# DataBinder.Eval(Container.DataItem, "State") %>
на странице aspx
?
В чем разница между тем, что
<%# Eval("State") %>
на странице aspx
по сравнению с
<%# DataBinder.Eval(Container.DataItem, "State") %>
на странице aspx
?
Eval ( "State" ) - упрощенная форма синтаксиса DataBinder.Eval(Container.DataItem, "State" ). Он работает только внутри элементов управления с привязкой к данным.
Для получения дополнительной информации см. документацию MSDN.
Нет никакой разницы. Метод "Eval" является всего лишь ярлыком для метода DataBinder.Eval(Container.DataItem, "blah" ).
Между обложками существует много различий между <%# 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 не нуждается в разрешении самостоятельно.
метод Eval - это всего лишь ярлык последнего
Я видел следующий код
<%# (DataBinder.Eval(Container.DataItem, "ApplicationId").ToString() == "-1" ? "N/A" : Eval("ApplicationId").ToString()) %>
Итак, я думаю, они немного отличаются.