modalpopup中的按钮不会为外部组件

时间:2017-09-12 15:09:01

标签: c# asp.net popup

遇到的问题:

  • UpdatePanel内部的按钮,位于ModalPopup内部,不会执行 .DataBind()
  • 按钮执行其他代码但不执行.DataBind()

我想要的工作:

  • 单击ModalPopup中的按钮时,执行.DataBind(),Button位于UdatePanel内,Gridview位于UpdatPanel外

我有三个更新面板,所有这些都只是根据某些条件分别执行ModalPopupExtender。我还有一个gridview,有一个自定义按钮可以打开第一个弹出窗口,它位于三个updatepanel之外。两个updatepanels有一个按钮,用于执行gridview的.DataBind(),同时隐藏其他弹出窗口。在弹出窗口中按下按钮后(这也在更新面板内),前一个弹出窗口关闭,这意味着它在代码隐藏中执行代码.Hide(),但.DataBind()即使我放.DataBind()也没有在.Hide()

之前

我还尝试使用Response.RedirectServerTransfer而不是使用.DataBind()刷新页面,按钮停止工作。 我还尝试在另一个updatepanel中包围gridview,所以我可以使用.Update,但是当我执行弹出窗口的按钮时,它拒绝关闭,第二个弹出窗口显示它看起来像嵌套弹出窗口,按钮为第二个弹出窗口也停止了工作。

代码工作正常,但唯一不起作用的是在弹出窗口中按下按钮后刷新gridview。如果我再次单击弹出窗口的按钮(gridview中的自定义按钮),那么当gridview更新时,那就错了。

我没有想法如何解决这个问题,对此有何建议?

HTML

     <asp:GridView ID="gridview" runat="server" CssClass="table table-hover" AutoGenerateColumns="False" DataKeyNames="OutgoingID" DataSourceID="SqlDataMaterials" HorizontalAlign="Center" OnRowCommand="gridview_RowCommand" Width="100%">
                                <Columns>
                                    <asp:TemplateField HeaderText="#">
                                        <ItemTemplate>
                                            <asp:Button ID="myButton" runat="server" Text="View" CommandName="ClickMe" CommandArgument='<%# Eval("OutgoingID") %>' CausesValidation="False" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField DataField="ClassificationName" HeaderText="ClassificationName" SortExpression="ClassificationName" />
                                    <asp:BoundField DataField="MaterialName" HeaderText="MaterialName" SortExpression="MaterialName" />
                                    <asp:BoundField DataField="Qty" HeaderText="Qty" SortExpression="Qty" />
                                    <asp:BoundField DataField="Total" HeaderText="Total" SortExpression="Total" />
                                    <asp:BoundField DataField="RequestDate" HeaderText="RequestDate" SortExpression="RequestDate" />
                                </Columns>
                                <EmptyDataTemplate>
                                    <asp:Panel ID="Panel3" runat="server" CssClass="breadcrumb">
                                        No Requests for this project.
                                    </asp:Panel>
                                </EmptyDataTemplate>
</asp:GridView>

首次弹出

         <asp:Panel ID="Panel2" runat="server" Height="400" Width="700" class="modalPopup">
                        <section class=" text-center" style="height: 149px; padding: 2px; vertical-align: middle; text-align: center;">
                            <section class="label-info">
                                <asp:Button ID="btn_Close" runat="server" Text="Close" Width="50px" Height="20px" CssClass="btn-danger pull-right" Font-Size="Smaller" />



         <asp:Label ID="Label1" runat="server" Text="REQUEST INFORMATION" CssClass="label">

                            </asp:Label>

                        </section>
                        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                            <ContentTemplate>
                                (Some very long html here with buttons that execute the other popups)
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </section>
                </asp:Panel>
  <asp:HiddenField ID="HiddenField1" runat="server" />
            <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BehaviorID="popup" PopupControlID="Panel2" DropShadow="True" BackgroundCssClass="modalBackground" TargetControlID="HiddenField1" OkControlID="btn_Close">
                <Animations>
 <OnShown><Fadein Duration="0.50" /></OnShown>
 <OnHiding><Fadeout Duration=".05" /></OnHiding>
                </Animations>
            </ajaxToolkit:ModalPopupExtender>

第二次弹出

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:HiddenField ID="HiddenField2" runat="server" />
            <asp:Panel ID="panelSuccess" runat="server" Height="150" Width="300" class="modalPopup">
                <section class="text-center">
                    <h5>Request successfully approved.</h5>
                    <br />
                    <asp:Button ID="btnSuccessOk" runat="server" Text="OK" CssClass="btn btn-sm btn-success" OnClick="btnSuccessOk_Click" />

                </section>
            </asp:Panel>
            <ajaxToolkit:ModalPopupExtender ID="ModalAlertSuccess" runat="server" BehaviorID="popup2" PopupControlID="panelSuccess" DropShadow="True" TargetControlID="HiddenField2" BackgroundCssClass="modalBackground" OkControlID="btnSuccessOk">
                <Animations>
                             <OnShown><Fadein Duration="0.50" /></OnShown>
                             <OnHiding><Fadeout Duration=".05" /></OnHiding>
                </Animations>
            </ajaxToolkit:ModalPopupExtender>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnSuccessOk" />
        </Triggers>
    </asp:UpdatePanel>

第三个弹出窗口

 <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
        <ContentTemplate>

            <asp:HiddenField ID="HiddenField3" runat="server" />
            <asp:Panel ID="panelCancel" runat="server" Height="150" Width="300" class="modalPopup">
                <section class="text-center">
                    <h5>Request Cancelled.</h5>
                    <br />
                    <asp:Button ID="btnCancelRq" runat="server" Text="OK" CssClass="btn btn-sm btn-success" OnClick="btnCancelRq_Click" />

                </section>
            </asp:Panel>
            <ajaxToolkit:ModalPopupExtender ID="ModalAlertCancel" runat="server" BehaviorID="popup3" PopupControlID="panelCancel" DropShadow="True" TargetControlID="HiddenField3" BackgroundCssClass="modalBackground" OkControlID="btnCancelRq">
                <Animations>
                             <OnShown><Fadein Duration="0.50" /></OnShown>
                             <OnHiding><Fadeout Duration=".05" /></OnHiding>
                </Animations>
            </ajaxToolkit:ModalPopupExtender>

        </ContentTemplate>
    </asp:UpdatePanel>

和背后的代码

这是来自第一个弹出窗口

protected void btn_approve_Click(object sender, EventArgs e)
        {
            try
            {
                if (hf_outgoingId.Value != null)
                {
                    var abc = (from a in db.Outgoings
                               where a.OutgoingID == Convert.ToInt32(hf_outgoingId.Value)
                               select a).FirstOrDefault();
                    abc.Status = "APPROVED";
                    db.SubmitChanges();

                    gridview.DataBind();
                    ModalPopupExtender1.Hide();
                    ModalAlertSuccess.Show();
                }
            }
            catch (Exception x)
            {

            }


        }

以防第二个/第三个弹出窗口

protected void btnSuccessOk_Click(object sender, EventArgs e)
{
    gridview.DataBind();
}

protected void btnCancelRq_Click(object sender, EventArgs e)
{
    gridview.DataBind();
}

2 个答案:

答案 0 :(得分:0)

您必须在数据绑定之前将数据源分配给gridview以绑定数据

protected void btnSuccessOk_Click(object sender, EventArgs e)
{
    gridview.DataSourceID = SqlDataMaterials;
    gridview.DataBind();
}

protected void btnCancelRq_Click(object sender, EventArgs e)
{
     gridview.DataSourceID = SqlDataMaterials;
     gridview.DataBind();
}

答案 1 :(得分:0)

我现在有一个正常工作的代码,但它仍然没有解答为什么按钮在最后两个弹出窗口中不会被触发,而不是将触发器放在最后两个modalpopupextender中,我将它放在主弹出窗口中,其按钮仍在更新面板中。我不知道最后两个弹出窗口的交易是什么,为什么它不会执行,因为它们都在更新面板内。

但是我觉得buttonclick工作的原因是我的主弹出窗口里面有更新面板,而另外两个是在更新面板中包围的。

    <asp:Panel ID="Panel2" runat="server" Height="400" Width="700" class="modalPopup" Style="display: none;">
<section class=" text-center" style="height: 149px; padding: 2px; vertical-align: middle; text-align: center;">
                    <section class="label-info">
                        <asp:Button ID="btn_Close" runat="server" Text="Close" Width="50px" Height="20px" CssClass="btn-danger pull-right" Font-Size="Smaller" />

                        <asp:Label ID="Label1" runat="server" Text="REQUEST INFORMATION" CssClass="label">

                        </asp:Label>

                    </section>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" >
                        <ContentTemplate>
        (some long html code with button 'btn_approve')
                                </ContentTemplate>
                                <Triggers>
                                    <asp:PostBackTrigger ControlID="btn_approve" />
                                </Triggers>
                            </asp:UpdatePanel>

背后的代码

protected void btn_approve_Click(object sender, EventArgs e)
        {
            try
            {
                if (hf_outgoingId.Value != null)
                {
                    var abc = (from a in db.Outgoings
                               where a.OutgoingID == Convert.ToInt32(hf_outgoingId.Value)
                               select a).FirstOrDefault();
                    abc.Status = "APPROVED";
                    db.SubmitChanges();

                    gridview.DataBind();
                    ModalPopupExtender1.Hide();
                    ModalAlertSuccess.Show();
                }
            }
            catch (Exception x)
            {

            }


        }

我也可以在点击按钮后立即显示第二个弹出窗口,而不会让它看起来像嵌套弹出窗口。