0

我的问题是我曾经能够做到这一点,

<div runat="server" visible='<%#CallAFunctionThatReturnsBoolean() %>' >

当控件的 DataBind 函数被隐式调用并且 div 的可见性将被正确设置时,将在 Page_Load 中调用 CallAFunctionThatReturnsBoolean()。

现在由于某种原因不再发生这种情况,为了使其工作,我必须在我的基 Page 类中调用 Page.DataBind() 或在该页面的 Page_Load 子中调用 Me.DataBind(),但我没有t 真的想这样做,尤其是在基 Page 类中,因为如果我有一个页面,假设其中有一个 DataGrid,我已经显式调用了 DataBind() 函数,那么这个 DataGrid 将被绑定两次,一次来自 Page。 DateBind 和一次从显式调用 datagrid.DataBind()。

知道为什么不再隐式调用控件的数据绑定事件吗?

谢谢

4

1 回答 1

2

<%#发生数据绑定时,<%=总是在构建页面时发生,而不管任何数据绑定。听起来这就是你要找的东西?

数据绑定也是控制级别,因此如果您“数据绑定”一个网格,它不会对任何其他控件进行数据绑定。调用网格时,即使是嵌入的模板化控件也不会自动进行数据绑定,除非您连线这样做。

尝试执行以下操作,看看它是否可以解决您的问题:

<div runat="server" visible='<%= CallAFunctionThatReturnsBoolean() ? "true" : "false" %>' >

如果您要求它发生在数据绑定事件中,我更喜欢在服务器端实现 OnDataBinding,如下所示:

// in your aspx
<div runat="server" OnDataBinding="yourDiv_DataBinding">

// in your .cs
protected void yourDiv_DataBinding(object sender, EventArgs e)
{
    HtmlControl div = (HtmlControl)(sender);
    div.Visible = CallAFunctionThatReturnsBoolean();
}
于 2009-11-16T21:29:16.517 回答