当前位置: 首页 > 知识库问答 >
问题:

我需要在点击按钮/链接时动态生成一个包含用户控件的模式弹出窗口

拓拔浩阔
2023-03-14

我有一个asp。net web表单网站,我正试图通过添加弹出式模块来增强该网站,该模块显示可租赁设备的租金。在大多数页面上,费率是“静态”的,并张贴在该页面上所有设备的页面顶部。但是,在一些页面上,顶部的费率不能是“静态”的,因为每件设备的费率不同,因此需要弹出窗口。

我已经创建了一个用户控件(我将称之为“费率卡”),它对传递给它的设备ID进行数据库查找和费率计算,然后创建一个格式化的DIV(包括样式、免责声明和条款与条件的链接)。对于“静态”页面,我只需在文档的asp:placeholder中插入这个DIV,就完成了。对于其他页面,我希望继续使用我的费率卡用户控件作为弹出窗口的内容。

以下是我尝试过的:

>

  • asp:使用“onClick”启动服务器端代码以生成费率卡的按钮。然后将其插入文档中的引导模式代码块中,最后服务器端调用一些显示模式弹出窗口的javascript代码(通过ClientScript.RegisterStartupScript)。这是可行的,但每次单击“查看速率”按钮时,网页都会重新加载,并滚动回顶部。如果我尝试检查“isPostBack”并返回(如果是),页面仍会重新加载,我所拥有的只是来自网站主控的页眉和页脚。

    我开始编写代码,将引导模式块放在asp:UpdatePanel中,但在阅读了几篇不同的文章之后,页面似乎仍然会重新加载。

    所以我想要完成的是让用户点击一件设备名称旁边的一个元素(按钮、链接、标签、div等)。),让这个东西触发要生成的费率卡,然后显示为模态弹出窗口。

    我的编程背景是C#,主要用于WinForm客户端应用程序,但对asp.net网站有一些经验。所以,我可能需要一些额外的指导和例子。

    提前感谢任何帮助!

    新增代码:

    按钮来源:

    <asp:Button ID="ShowRates" runat="server" OnClick="ShowRates_Click" CommandArgument="0" Text="View Rates"  ></asp:Button>
    

    后面的按钮代码:

    protected void ShowRates_Click(object sender, EventArgs e)
    {
        var ID = ((Button)sender).CommandArgument;
        if (int.TryParse(ID, out int assetID) == false) return;
    
        assetCard_ShowRate(sender, e, assetID);
    }
    
    private void assetCard_ShowRate(object sender, EventArgs e, int assetID)
    {
        Controllers.AssetController ctlr = new Controllers.AssetController();
        var rates = ctlr.GetAssetRateCardsByAssetID(assetID);
    
        UserControls.RatesTable2 ratesTable = (UserControls.RatesTable2)LoadControl("~/UserControls/RatesTable2.ascx");
        ratesTable.BuildRateCard(rates, "");
    
        //Add the rate card control to the placeholder
        phRateCard.Controls.Add(ratesTable);
    
        //Call the javascrip function to show the popup
        Page.ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup();", true);
    }
    

    后面的页面代码:引导弹出类块:

    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModal-label">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                </div>
                <div class="modal-body">
                    <asp:PlaceHolder ID="phRateCard" runat="server">
                        <%--Place Rate Card Here--%>
                    </asp:PlaceHolder>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>
    

    Javascript:

    <script type="text/javascript">
        function ShowPopup() {
            $("#myModal").modal("show");
        }
    </script>
    

    页面重载似乎发生在调用javascript之后,javascript开始运行之前。

  • 共有1个答案

    呼延升
    2023-03-14

    这就是我如何能够完成我需要使用以下代码:

    按钮来源:

    <button id="ShowRates2" runat="server" type="button" class="btn btn-link treUnderline" style="color:black" onclick="ShowRates_Click(this)">View Rates</button>
    

    后面的按钮代码:

    [System.Web.Services.WebMethod]
    public static string ShowRates(string AssetID)
    {
        int assetID = int.Parse(AssetID);
    
        ListLayoutByCategory5 method = new ListLayoutByCategory5();
        string html = method.BuildRateCard(assetID);
        return html;
    }
    
    private string BuildRateCard(int assetID)
    {
        Controllers.AssetController ctlr = new Controllers.AssetController();
        var rates = ctlr.GetAssetRateCardsByAssetID(assetID);
    
        UserControl uc = new UserControl();
        UserControls.RatesTable2 ratesTable = (UserControls.RatesTable2)uc.LoadControl("~/UserControls/RatesTable2.ascx");
        ratesTable.BuildRateCard(rates, "", false);
    
        //Get the HTML code of the ratesTable control (uses RenderControl(HtmlTextWriter(StringWriter(StringBuilder))) )
        string html = ratesTable.HTML;
        return html;
    }
    

    页面来源:

    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModal-label">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                </div>
                <div id="popupBody" class="modal-body">
                    <asp:PlaceHolder ID="phRateCard" runat="server"></asp:PlaceHolder>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
    
            </div>
        </div>
    </div>
    

    Javascript:

        function ShowRates_Click(asset) {
            var selectedAssetID = asset.getAttribute("assetid");
            PageMethods.ShowRates(selectedAssetID, ShowRatesPopup);
        }
    
        function ShowRatesPopup(popupHTML) {
            document.getElementById('popupBody').innerHTML = popupHTML;
            $("#myModal").modal("show");
        }
    
    </script>
    

    这就是我必须要做的。在按钮的“onclick”事件中,我调用了JavaScript函数“ShowRates(this)”。此函数从属性中提取assetid,然后调用服务器端方法“ShowRates”,将assetid传递给它。此方法创建rate card用户控件,并返回包含该用户控件的原始html代码的字符串。(这使用了C#的control.RenderControl方法来获取html。)

    一旦JavaScript函数从服务器接收到html代码,它就调用JavaScript函数ShowRatesPopup并将html代码传递给它。该函数将html代码插入到popupBody中,然后将模态popup称为#myModal。

     类似资料:
    • 我有一个Maven/Spring-Boot/Thymeleaf项目,我希望在一行中单击一个按钮,以触发一个模式弹出窗口,其中包含该行数据的详细视图。 我最初的问题是,当在任何给定行上单击按钮时,模态弹出窗口只会显示第一行的数据。我意识到这是因为每一行中的每个按钮都有相同的数据目标,并且浏览器正在抓取表中的第一行。 所以,现在我正在尝试使用JavaScript/jQuery为我填充模态数据。我已经删

    • 本文向大家介绍java实现点击按钮事件弹出子窗口,包括了java实现点击按钮事件弹出子窗口的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现点击按钮事件弹出子窗口的具体代码,供大家参考,具体内容如下 要求: 1、在父窗口中添加一个按钮 2、点击按钮弹出子窗口 注意:这是JDK1.7版本 在JDK1.7之前,JFrame是不能直接添加子窗口的,要先将JInternalFram

    • 我的默认设置上有一个按钮。启动“条款和条件”模式弹出窗口(popup1)的aspx。然后,我在模式弹出窗口上有一个按钮,在顶部(我的条款和条件第2页)启动另一个模式弹出窗口(popup2)。 我想添加一个后退按钮到modalpopup2关闭popup2,并显示modalpopup1,所以用户有从popup2前进/后退选项。 我添加了“纽扣背”,并尝试。。。 但这只是重定向回我的默认设置。aspx。

    • 我的标题措辞糟糕,因为我的问题很难描述,所以我为它画了一幅图: 我有一个ImageView对象,它代表一堆卡片(不是扑克牌,只是用它们作为示例)。单击此图像视图时,我需要弹出一个具有滚动窗格的窗口,并向他们显示链接列表中的所有卡片对象。当用户单击窗口之外的任何地方(稍后,单击任何鼠标右键)时,滚动窗格窗口需要关闭。 我已经尝试过的方法: > APPLICATION_MODAL场景。然后是Scene

    • 我有问题,点击链接从弹出窗口。单击按钮后,弹出窗口显示约3秒: 我正试图通过单击“取消” 和 但是链接没有被点击。我不知道如何断言工作在这个弹出