【问题标题】:ASP.NET How to use button on modal Pop Up Bootstrap 4 without closing or refreshing popupASP.NET 如何在模式弹出 Bootstrap 4 上使用按钮而不关闭或刷新弹出窗口
【发布时间】:2020-11-07 21:35:58
【问题描述】:

我的主页上有一个打开弹出窗口的按钮,在弹出窗口中我有 gridview、表格和按钮(添加新行),用户在表格中添加一个新人并在按钮上(添加新行)添加从表到网格视图的新行。问题是单击按钮(添加新行)时弹出窗口将关闭,当再次打开时弹出窗口将在网格视图中具有该新行。 单击按钮(添加新行)时如何防止弹出窗口关闭?

<head runat="server">
    <title></title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:LinkButton ID="btnOpenPopUp" runat="server" CssClass="btn btn-dark btn-sm" data-toggle="modal" data-target="#PopUpModal">Open PopUp</asp:LinkButton>

        <div class="modal fade" id="PopUpModal" data-backdrop="static">

            <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <div class="container-fluid">
                            <br />
                            <div class="text-center">
                                <asp:Label ID="Label28" runat="server" Font-Size="X-Large" Text="GRID with table"></asp:Label>
                            </div>
                        </div>
                    </div>
                    <div class="modal-body ">
                        <div>
                            <table class="table-borderless p-0"
                                border="1" id="HeaderGridView1"
                                style="border-style: None; border-collapse: collapse;">
                                <tr>
                                    <th style="width: 185px; text-align: center">Name</th>
                                    <th style="width: 150px; text-align: center">Surname</th>
                                    <th style="width: 110px; text-align: center">Nickname</th>
                                </tr>
                            </table>
                        </div>
                        <div class="container-fluid p-0" style="max-height: 99px; overflow-y: auto;">
                            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
                                CssClass="table-borderless"
                                CellPadding="1"
                                BorderStyle="None"
                                ShowHeader="false"
                                ShowFooter="false">
                                <Columns>
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <asp:TextBox ID="txtName" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <asp:TextBox ID="txtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>

                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <asp:TextBox ID="txtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </div>
                        <div>
                            <table class="table-borderless p-0"
                                border="1" id="FooterGridview1"
                                style="border-style: None; border-collapse: collapse;">
                                <tr>
                                    <th>
                                        <asp:TextBox ID="FtxtName" BackColor="#CCCCCC" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                    </th>
                                    <th>
                                        <asp:TextBox ID="FtxtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>
                                    </th>
                                    <th>
                                        <asp:TextBox ID="FtxtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                    </th>
                                </tr>
                            </table>
                        </div>
                        <div class="p-0">
                            <asp:Button ID="Button1" runat="server" OnClick="AddNewRow_Click" UseSubmitBehavior="False" Text="Add new row" />
                        </div>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">Close</button>
                        <button type="button" class="btn btn-primary btn-sm">Save</button>
                    </div>
                </div>
            </div>
        </div>
    </form>
</body>
</html>

这是后面的代码:

protected void AddNewRow_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("cls_Name");
    dt.Columns.Add("cls_Surname");
    dt.Columns.Add("cls_Nickname");
    DataRow dr = null;
    if (ViewState["vs"] != null)
    {
        for (int i = 0; i < 1; i++)
        {
            dt = (DataTable)ViewState["vs"];
            if (dt.Rows.Count > 0)
            {
                dr = dt.NewRow();
                dr["cls_Name"] = FtxtName.Text;
                dr["cls_Surname"] = FtxtSurname.Text;
                dr["cls_Nickname"] = FtxtNickname.Text;
                dt.Rows.Add(dr);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }
    }
    else
    {
        dr = dt.NewRow();
        dr["cls_Name"] = FtxtName.Text;
        dr["cls_Surname"] = FtxtSurname.Text;
        dr["cls_Nickname"] = FtxtNickname.Text;
        dt.Rows.Add(dr);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
    ViewState["vs"] = dt;
    FtxtName.Text = "";
    FtxtSurname.Text = "";
    FtxtNickname.Text = "";
}

【问题讨论】:

    标签: c# asp.net webforms popup bootstrap-modal


    【解决方案1】:

    为了在使用 ASP.NET WebForms 时实现部分页面回发,您应该使用 ajax 调用或使用UpdatePanel 来完成所需的任务。

    为此,请将ScriptManager 放在您的form 元素之后,并带有runat="server" 属性。

    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    

    并像这样将您的模式包装在UpdatePanel 中:

    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <div class="modal fade" id="PopUpModal" data-backdrop="static">
                <div class="modal-dialog" role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <div class="container-fluid">
                                <br />
                                <div class="text-center">
                                    <asp:Label ID="Label28" runat="server" Font-Size="X-Large" Text="GRID with table"></asp:Label>
                                </div>
                            </div>
                        </div>
                        <div class="modal-body ">
                            <div>
                                <table class="table-borderless p-0"
                                    border="1" id="HeaderGridView1"
                                    style="border-style: None; border-collapse: collapse;">
                                    <tr>
                                        <th style="width: 185px; text-align: center">Name</th>
                                        <th style="width: 150px; text-align: center">Surname</th>
                                        <th style="width: 110px; text-align: center">Nickname</th>
                                    </tr>
                                </table>
                            </div>
                            <div class="container-fluid p-0" style="max-height: 99px; overflow-y: auto;">
                                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
                                    CssClass="table-borderless"
                                    CellPadding="1"
                                    BorderStyle="None"
                                    ShowHeader="false"
                                    ShowFooter="false">
                                    <Columns>
                                        <asp:TemplateField>
                                            <ItemTemplate>
                                                <asp:TextBox ID="txtName" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <ItemTemplate>
                                                <asp:TextBox ID="txtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>
    
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <ItemTemplate>
                                                <asp:TextBox ID="txtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                    </Columns>
                                </asp:GridView>
                            </div>
                            <div>
                                <table class="table-borderless p-0"
                                    border="1" id="FooterGridview1"
                                    style="border-style: None; border-collapse: collapse;">
                                    <tr>
                                        <th>
                                            <asp:TextBox ID="FtxtName" BackColor="#CCCCCC" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                        </th>
                                        <th>
                                            <asp:TextBox ID="FtxtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>
                                        </th>
                                        <th>
                                            <asp:TextBox ID="FtxtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                        </th>
                                    </tr>
                                </table>
                            </div>
                            <div class="p-0">
                                <asp:Button ID="Button1" runat="server" OnClick="AddNewRow_Click" UseSubmitBehavior="False" Text="Add new row" />
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">Close</button>
                            <button type="button" class="btn btn-primary btn-sm">Save</button>
                        </div>
                    </div>
                </div>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
    

    所以,整个身体应该是这样的:

    <body>
        <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
                    <asp:UpdatePanel runat="server">
                <ContentTemplate>
                    <div class="modal fade" id="PopUpModal" data-backdrop="static">
                        <div class="modal-dialog" role="document">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <div class="container-fluid">
                                        <br />
                                        <div class="text-center">
                                            <asp:Label ID="Label28" runat="server" Font-Size="X-Large" Text="GRID with table"></asp:Label>
                                        </div>
                                    </div>
                                </div>
                                <div class="modal-body ">
                                    <div>
                                        <table class="table-borderless p-0"
                                            border="1" id="HeaderGridView1"
                                            style="border-style: None; border-collapse: collapse;">
                                            <tr>
                                                <th style="width: 185px; text-align: center">Name</th>
                                                <th style="width: 150px; text-align: center">Surname</th>
                                                <th style="width: 110px; text-align: center">Nickname</th>
                                            </tr>
                                        </table>
                                    </div>
                                    <div class="container-fluid p-0" style="max-height: 99px; overflow-y: auto;">
                                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
                                            CssClass="table-borderless"
                                            CellPadding="1"
                                            BorderStyle="None"
                                            ShowHeader="false"
                                            ShowFooter="false">
                                            <Columns>
                                                <asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:TextBox ID="txtName" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:TextBox ID="txtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>
    
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:TextBox ID="txtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                            </Columns>
                                        </asp:GridView>
                                    </div>
                                    <div>
                                        <table class="table-borderless p-0"
                                            border="1" id="FooterGridview1"
                                            style="border-style: None; border-collapse: collapse;">
                                            <tr>
                                                <th>
                                                    <asp:TextBox ID="FtxtName" BackColor="#CCCCCC" runat="server" Width="185px" Text='<%#Eval("cls_Name") %>'></asp:TextBox>
                                                </th>
                                                <th>
                                                    <asp:TextBox ID="FtxtSurname" runat="server" Width="150px" Text='<%#Eval("cls_Surname") %>'></asp:TextBox>
                                                </th>
                                                <th>
                                                    <asp:TextBox ID="FtxtNickname" runat="server" Width="110px" Text='<%#Eval("cls_Nickname") %>'></asp:TextBox>
                                                </th>
                                            </tr>
                                        </table>
                                    </div>
                                    <div class="p-0">
                                        <asp:Button ID="Button1" runat="server" OnClick="AddNewRow_Click" UseSubmitBehavior="False" Text="Add new row" />
                                    </div>
                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">Close</button>
                                    <button type="button" class="btn btn-primary btn-sm">Save</button>
                                </div>
                            </div>
                        </div>
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    </body>
    

    【讨论】:

    • 感谢您的帮助,但这仍然对我不起作用。现在,当我打开一个弹出窗口并单击按钮(添加新行)时,弹出窗口就会消失并且页面被锁定。在刷新页面之前,我什至无法再次打开弹出窗口。还有其他解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多