0

我正在尝试实现手动回发以触发未附加到控件的代码。我不想使用 AJAX PageMethods,因为我需要在回发期间引用某些控件,并且希望结果更新到页面上的 gridview。

我已经有另外两种可行的方法,但由于某种原因,我的第三种方法没有部署一次,但我的开发机器上运行良好。

背后的代码(Page_load)

        switch (Request["__EVENTARGUMENT"]) {
            case "ItemReserved":
                GetAllStock();
                break;
            case "PendingItemRemoved":
                PopulatePending();
                break;
            case "StockInSubmitted":
                SubmitNewStock();    // this doesn't fire
                break;
        }

一旦代码到达“SubmitNewStock()”,我就插入了一行写入日志文件。日志写在我的开发机器上,但没有写在网络服务器上。其他两个回发都按预期工作。

页面脚本

    function ctxMenu_Reserve() {
        PageMethods.SetItemReserved(CGRefForMenu);
        __doPostBack('', 'ItemReserved');

        HideMouseMenu();
    }

    function ctxMenuPending_Remove() {
        PageMethods.RemovePendingItem(CGRefForPendingMenu);
        __doPostBack('', 'PendingItemRemoved');
    }

    function StockINSubmit(){
        SubmitPlaceHolder = document.getElementById('<%=PlaceholderStockInSubmit.ClientID %>');
        SubmitPlaceHolder.innerHTML = "Processing...";

        __doPostBack('', 'StockInSubmitted');  //Causes postback, but relevant code is not triggered once on my live server
    }

有谁知道为什么在我将网站部署到我的实时网络服务器后这不起作用?

我应该提到 StockINSubmit() 是从动态创建的客户端链接按钮启动的,该按钮位于模式弹出框内。

        PlaceholderStockInSubmit.Controls.Add(
            new LinkButton() {
                OnClientClick = "StockINSubmit()",
                Text = "Submit",
                ID = "lnkStockInSubmit"
            });

StockINSubmit() 替换包含该按钮的 DIV 的 HTML 内容。(所以我点击“提交”,它变为“处理”标签)。我看不出这会导致任何问题的原因,但认为值得一提。

4

1 回答 1

0

我终于弄清楚发生了什么...

动态创建的链接按钮作为其服务器单击 (onClick) 事件的一部分执行回发(尽管我没有将任何事件绑定到它)。在我的开发机器上,OnClientClick 事件回发击败了 OnClick 回发,因此所有预期的代码都正常运行。

出于某种原因,一旦部署到服务器上,服务器的 OnClick 事件将击败 OnClientClick 事件,因此在没有 OnClientClick 事件提供的额外 __EVENTARGUMENT 信息的情况下发生了完整的回发。

为了解决这个问题,我在这个网站上找到了另一篇文章,解释了如何取消默认回发,但仍然执行客户端 javascript。

我的服务器端代码现在更新如下:

    LinkButton newButton = new LinkButton() {
        OnClientClick = "StockINSubmit()",
        Text = "Submit",
        ID = "lnkStockInSubmit"
    };
    newButton.Attributes.Add("onClick", "return false;");
    PlaceholderStockInSubmit.Controls.Add(newButton);

现在它就像一个魅力:)

谢谢你们的帮助。

于 2012-11-21T16:55:53.877 回答