Встроенные привязки данных теги asp.net не выполняются - PullRequest
0 голосов
/ 17 ноября 2009

Моя проблема в том, что я привык это делать,

'>

и CallAFunctionThatReturnsBoolean () будут вызываться в Page_Load, когда функция DataBind элемента управления вызывается неявно и видимость div будет установлена ​​правильно.

Теперь по какой-то причине это больше не происходит, и чтобы заставить его работать, мне нужно было бы либо вызвать Page.DataBind () в моем базовом классе Page, либо Me.DataBind () в подпрограмме Page_Load на этой странице, но Я действительно не хочу этого делать, особенно в базовом классе Page, потому что тогда, если у меня есть страница с, скажем, DataGrid, в которой я уже вызываю функцию DataBind () явно, то эта DataGrid будет привязана дважды, один раз из Page.DateBind и один раз из явного вызова datagrid.DataBind ().

Есть идеи, почему событие привязки данных элемента управления больше не вызывается неявно?

Спасибо

1 Ответ

2 голосов
/ 17 ноября 2009

<%# происходит для привязки данных, <%= будет происходить всегда, когда страница создается независимо от какой-либо привязки данных. Похоже, это то, что вы ищете?

Кроме того, привязка данных является уровнем управления, поэтому, если вы «связываете данные» с сеткой, она не будет привязывать данные к другим элементам управления. Даже встроенные шаблонные элементы управления не будут автоматически привязаны к данным при вызове сетки, если вы не подключите их для этого.

Попробуйте выполнить следующее и посмотрите, исправит ли это вашу проблему:

<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();
}
...