什么时候应该使用Page.DataBind()与Control.DataBind()?

时间:2009-10-21 20:28:04

标签: asp.net data-binding

在ASP.NET中,您可以单独绑定控件(例如GridView1.DataBind()),也可以调用Page.DataBind()绑定页面上的所有控件。

这两个电话之间有什么特别的区别吗?是否有时候应该优先考虑另一个?

4 个答案:

答案 0 :(得分:11)

Page.DataBind Control.DataBindPage类和TemplateControl类都不会覆盖Control.DataBind

Control.DataBind只为控件调用OnDataBinding,然后为每个子控件调用DataBind

答案 1 :(得分:8)

Page.DataBind()Control.DataBind()之间进行选择,以下是Microsoft guidance

  

“两种方法的工作方式相似。主要方法   差异在于所有数据源   绑定到他们的服务器控件   在Page.DataBind方法之后   调用。没有数据呈现给   控制,直到你明确调用   要么是Web的DataBind方法   服务器控制或直到你调用   页面级Page.DataBind方法。   通常,Page.DataBind(或DataBind)   从Page_Load事件调用。

有些情况下,您需要单独指定控件数据绑定,具体取决于当前页面方案。有关控制绑定控件和控件绑定的详细控制级别,我选择控制级DataBind()方法。

答案 2 :(得分:7)

在ASP.NET页面中,您可以直接绑定到页面代码隐藏类的公共/受保护属性。例如:

<form id="form1" runat="server"><%#HtmlUtility.HtmlEncode(MyProperty.ToString())%></form>

在这种情况下,没有特定的控件来调用.DataBind() - 页面本身就是控件。事实上,调用Page.DataBind()也会在所有子控件上调用DataBind(),所以如果你已经在做一个Page.DataBind(),就不需要单独绑定控件了数据。

答案 3 :(得分:0)

这不是两个电话之间的潜意识的直接答案,而是 关于DataBind() vs Page.DataBind()我想分享一个有趣的经历,这也可以指导您在两者之间进行选择:

我只花了一整天的时间来确定为什么Ajax调用和巨大的Web应用程序中的事件被破坏(ItemCommand没有在回调和回发,丢失引用等方面引发。

原因是我有一个ASCX打电话给Page.DataBind()而不是DataBind()

当你找到它时,它似乎很明显,但是当你处理&gt; 500000行应用程序中的奇怪行为以及主/页/控件中的很多复杂性时,它不是。 如果你在错误的地方打电话,请注意Page.DataBind()