2013-01-06 19 views
1

当前我有一个UpdatePanel for jQuery对话框使用,其中包含一个GridView。如何分配UpdatePanel触发器的控件ID与gridview中的按钮

这GridView控件包含在页脚和EmptyDataTemplate

一个FileUpload控件为了获得在javascript FileUpload控件的工作,我知道,我们需要触发。

但是,我想指定为触发GridView的模板内的按钮...

当按钮btnAdd点击,文件中FileUpload控件将被保存。


下面是代码:

<asp:UpdatePanel ID="upnlEditExpense" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnAdd"/> 
     </Triggers> 
      ...................... 
       ........................ 
         ......................... 
     <asp:GridView runat="server" ID="grdExpense" ShowHeader="True" ShowFooter="True" 
      AutoGenerateColumns="False"> 
      <Columns> 
       ................... 
       <asp:TemplateField> 
         <FooterTemplate> 
           <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton> 
         </FooterTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
</asp:UpdatePanel> 

如果我直接把按钮的ID在这样触发的控件的ID,错误想出说btnAdd找不到......

什么我应该怎么做FileUpload控制工作?

回答

2

尝试注册从代码后回控制的背后是这样的:

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd"); 
     if (btnAdd != null) 
     { 
      ScriptManager1.RegisterAsyncPostBackControl(btnAdd); 
     } 
    } 
+0

我试过,但它仍然无法正常工作。我需要在此旁边添加任何其他代码吗? –

+0

您是否将此事件链接到GridView的'OnRowCreated'?单步执行代码并确保它进入'if'块。如果它仍然不起作用,请尝试@ erich007的方法 –

+0

是的,我做过,但仍然没有没有工作。是否必须将UpdateMode更改为条件? –

2

而不是增加一个触发upnlEditExpense的也许你可以尝试添加一个更新面板周围的链接按钮在模板中没有触发。 ..

<asp:TemplateField> 
    <FooterTemplate> 
      <asp:UpdatePanel ID="upnlBtnAdd" runat="server"> 
       <ContentTemplate> 
        <asp:LinkButton runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click"></asp:LinkButton> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
    </FooterTemplate> 
</asp:TemplateField> 
+0

首先感谢,我会尝试 –

+0

,不幸的是,即使我在您的解决方案中添加ContentTemplate base,它也不起作用。 –

+0

好的,最后一条建议:)在你的第一个版本上设置btnAdd ClientIDMode = static – erichste

3

这工作

protected void grdExpense_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     LinkButton btnAdd = (LinkButton)e.Row.Cells[0].FindControl("btnAdd"); 
     if (btnAdd != null) 
     { 
      ScriptManager.GetCurrent(this).RegisterPostBackControl(btnAdd); 
     } 

    } 
0

我也有类似p roblem和这篇文章帮助了我,但我发现只有在updatepanel UpdateMode设置为“Always”的情况下,才能在scriptmanager中注册控件。如果其设置为“有条件”,则此方法不起作用。

我发现了另一个办法,总是工作这是触发器添加到在GridView的数据绑定()事件在UpdatePanel:

Dim CheckBoxTrigger As UpdatePanelControlTrigger = New AsyncPostBackTrigger() 
    Dim SelectCheckBox As CheckBox 
    For i = 0 To GridViewEquipment.Rows.Count - 1 Step 1 
     SelectCheckBox = GridViewEquipment.Rows(i).Cells(12).FindControl("CheckBoxSign") 
     CheckBoxTrigger.ControlID = SelectCheckBox.UniqueID 
     UpdatePanelEquipment.Triggers.Add(CheckBoxTrigger) 
    Next 
相关问题