【发布时间】:2012-08-05 20:02:51
【问题描述】:
我有一个 FormView,我需要访问其中的一些 Div 和其他控件。我的 apsx 代码与此类似:
<asp:FormView ID="Edit_FV" runat="server" DataKeyNames="IDproceso" DefaultMode="Edit" DataSourceID="SqlDS_Procesos">
<EditItemTemplate>
<div id="second_info" runat="server">
<div id="second_info_left" runat="server">
<div id="alcance" class="report_field" runat="server">
<p class="container-title">
Alcance:</p>
<asp:TextBox ID="TextBox14" runat="server" TextMode="multiline" Width="400px" Height="120px" Text='<%# Bind("alcance") %>' />
</div>
</div>
<div id="second_info_right" runat="server">
<div class="valores-container" id="tipo_ahorro" runat="server">
<asp:CheckBox ID="ahorro_state" runat="server" Checked='<%# Bind("tipo_ahorro") %>' />
</div>
</div>
</EditItemTemplate>
</asp:FormView>
现在,假设我想使用 id = ahorro_state 访问 CheckBox,我尝试使用 Edit_FV.FindControl("ahorro_state") 并获得了 Null 引用。我还尝试了Edit_FV.FindControl("MainContent_Edit_FV_ahorro_state"),因为这是在最终 HTML 文档中实际命名 ID 的方式,但我也得到了 Null 引用。当我尝试访问任何 div(ID 为 second_info、tipo_ahorro 等)时,也会发生同样的情况。我觉得我犯了一个愚蠢的错误,但我环顾四周并没有找到答案。
有什么办法解决这个问题吗?
编辑:添加了我调用 FindControl 的代码。
我尝试从 Page_Load() 调用 DataBind():
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
if (Edit_FV.CurrentMode == FormViewMode.Edit)
{
Control c = Edit_FV.FindControl("ahorro_state");//c is null here.
}
}
还尝试设置Edit_FV的OnDataBound属性:OnDataBound="onBound"
protected void onBound(object sender, EventArgs e)
{
if (Edit_FV.CurrentMode == FormViewMode.Edit)
{
ControlCollection a = Edit_FV.Controls;
Control c = Edit_FV.FindControl("ahorro_state");//c is null here
}
}
【问题讨论】:
-
您尝试在哪个页面事件中访问控件?
-
就在Page_Load()中,有什么问题吗?