В чем разница между тем, что
<%# 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()) %>
Итак, я думаю, они немного отличаются.