在ASP.NET中,您可以单独绑定控件(例如GridView1.DataBind()
),也可以调用Page.DataBind()
绑定页面上的所有控件。
这两个电话之间有什么特别的区别吗?是否有时候应该优先考虑另一个?
答案 0 :(得分:11)
Page.DataBind
Control.DataBind
。 Page
类和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()
!