2015-08-31 79 views
0

我刚开始在我的解决方案中使用更新面板,所以我慢慢熟悉它们。我有一个GridView,它有一个与显示的每一行相关的删除按钮。当我点击删除按钮时,它的OnClick事件应该显示一个作为半模式确认框(作为灯箱完成)的面板删除与相关行相关联的记录。但是,当我单击按钮时,面板不会显示,因为它全部位于“更新面板”中。没有更新面板工作正常按钮里面的GridView里面更新面板不工作

任何想法?

这里是我的代码一个精简版:

<script runat="server"> 
Protected Sub LinkButtonDelete_Click(ByVal Sender As Object, ByVal e As EventArgs) 
    PanelConfirmMessage.Visible = True 
    PanelConfirmLightBox.Visible = True 
End Sub 
'.... note there is other code that handles the delete ... 
</script> 

<html> 
<head"></head> 
<body> 
<form id="form1" runat="server"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="GridView1" runat="server" DataSourceID="DataSourceGridView1"> 
       <Columns> 
        <asp:templatefield HeaderText="Name"> 
         <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyFieldName") %>' /></ItemTemplate> 
        </asp:templatefield> 
        <asp:TemplateField HeaderText="Delete"> 
         <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" OnClick="LinkButtonDelete_Click"></asp:LinkButton></ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
      <asp:SqlDataSource ID="DataSourceGridView1" runat="server" ConnectionString="<%$ ConnectionStrings:MyString %>" SelectCommand="MySelectCommand" SelectCommandType="StoredProcedure"></asp:SqlDataSource> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false"> 
     <p>Are you sure you want to continue?</p> 
     <asp:Button runat="server" ID="ButtonYes" Text="Yes" OnClick="ButtonYes_Click" /> 
     <asp:Button runat="server" ID="ButtonNo" Text="No" OnClick="ButtonNo_Click" /> 
    </asp:Panel> 
    <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel> 
</form> 
</body> 
</html> 
+0

你的意思是,当你按一下按钮,整个的UpdatePanel disappers?随着gridview,按钮等? – RelatedRhymes

+0

不。更新面板在那里。一切看起来都一样。我的意思是我的确认面板不显示。当你点击删除链接时,没有任何反应,页面保持原样。链接按钮不调用动作来显示面板。无论如何,我找到了答案见下文。 – ptownbro

回答

0

要回来后,从更新面板你的GridView模板字段控制,你可以控制在代码背后的的的DataBind事件添加到触发集合项目。

因此,尝试添加LinkButton这个OnDataBinding

protected void PostBackBind_DataBinding(object sender, EventArgs e) 
{ 
    LinkButton lb = (LinkButton) sender; 
    ScriptManager sm = (ScriptManager)Page.FindControl("scriptmanagerId"); 
    sm.RegisterPostBackControl(lb); 
} 



<asp:ScriptManager ID="scriptmanagerId" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="GridView1" runat="server"> 
       <Columns> 
        <asp:templatefield HeaderText="Name"> 
         <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("name") %>' /></ItemTemplate> 
        </asp:templatefield> 
        <asp:TemplateField HeaderText="Delete"> 
         <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" Text="Delete" OnClick="LinkButtonDelete_Click" OnDataBinding="LinkButtonDelete_DataBinding"></asp:LinkButton></ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
+0

已经试过了。由于它在GridView中,所以这不起作用。 ControlID不被识别为“LinkBut​​tonDelete”,因为它在GridView中。我认为你必须使用html中呈现的控件名称。这个名字并不是唯一的。无论哪种方式,您都不能使用该ID。 – ptownbro

+0

对不起,我没有认识到GridView。现在我正根据你的问题更新这个。你可以尝试一次。简单而简单的方法。 –

0

感谢所有为您提供帮助。我通过别人的帮助获得答案。答案很简单。我所要做的就是将确认与其他所有内容一起放入更新面板中。

缩短版本的修复:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:GridView ID="GridView1"...> 
      <Columns>....</Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ...></asp:SqlDataSource> 

     <!--- THE CONFIRMATION PANELS INSIDE THE UPDATEPANEL AS SHOWN HERE ---> 

     <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false"> 
     ... 
     </asp:Panel> 
     <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 
相关问题