<% # Eval ("State")%> или <% # DataBinder.Eval (Container.DataItem, "state")%> - PullRequest
35 голосов
/ 06 ноября 2008

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

<%# Eval("State") %>

на вашей aspx странице, вместо

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

на вашей aspx странице?

Ответы [ 5 ]

39 голосов
/ 06 ноября 2008

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

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

11 голосов
/ 06 ноября 2008

Разницы нет. Метод "Eval" - это просто ярлык для метода DataBinder.Eval (Container.DataItem, "blah").

9 голосов
/ 31 января 2013

Существует много различий между <%# 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 голосов
/ 06 ноября 2008

метод Eval является просто ярлыком последнего

0 голосов
/ 10 декабря 2012

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

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

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

...