Когда вы должны использовать Page.DataBind() и Control.DataBind()?
В ASP.NET вы можете привязывать элементы управления индивидуально (т.е. GridView1.DataBind()
), или вы можете вызвать Page.DataBind()
, чтобы связать все элементы управления на странице.
Есть ли какая-то конкретная разница между двумя вызовами? Бывают ли времена, когда нужно быть предпочтительнее другого?
Ответы
Ответ 1
Для выбора между параметром Page.DataBind() и Control.DataBind() здесь приведено руководство Microsoft :
"Оба метода работают аналогично. разница в том, что все источники данных привязаны к их серверным элементам управления после метода Page.DataBind называется. Данные не передаются до тех пор, пока вы не либо метод DataBind для Web сервера или пока вы не вызовете метод page.DataBind на уровне страницы. Как правило, Page.DataBind(или DataBind) вызывается из события Page_Load."
Будут случаи, когда вы хотите указать привязку данных управления отдельно, в зависимости от текущего сценария страницы. Для подробного уровня контроля над элементами управления и привязки элементов управления я выбираю методы DataBind() на уровне управления.
Ответ 2
Page.DataBind
Control.DataBind
. Ни класс Page
, ни класс TemplateControl
не переопределяют Control.DataBind
.
Control.DataBind
делает немного больше, чем вызов OnDataBinding
для элемента управления, затем он вызывает DataBind
для каждого дочернего элемента управления.
Ответ 3
На странице ASP.NET вы можете напрямую связываться с общедоступными/защищенными свойствами класса с кодом для кода. Например:
<form id="form1" runat="server"><%#HtmlUtility.HtmlEncode(MyProperty.ToString())%></form>
В этом случае нет специального управления для вызова .DataBind() on - сама страница является элементом управления. Так получилось, что вызов Page.DataBind() также вызовет DataBind() для всех дочерних элементов управления, поэтому, если вы уже делаете Page.DataBind(), нет необходимости связывать данные с отдельными элементами управления.
Ответ 4
Это не прямой ответ на вопрос об устушках между двумя вызовами, но
о DataBind() vs Page.DataBind() Я хотел бы поделиться интересным опытом, который также может помочь вам выбрать между обоими:
Я просто провел один полный день, чтобы понять, почему Ajax звонки и события в огромном веб-приложении были сломаны (ItemCommand не поднят на обратные вызовы и обратные вызовы, потерянные ссылки и т.д.).
Причина заключалась в том, что у меня был один ASCX, который сделал вызов для параметра Page.DataBind(), а не для DataBind().
Это может показаться очевидным, когда вы его нашли, но когда вы имеете дело с странным поведением в приложении > 500000 строк и сложностью в master/pages/controls, это не так.
Поэтому будьте осторожны с Page.DataBind(), если вы называете это не в том месте!