我正在尝试实现手动回发以触发未附加到控件的代码。我不想使用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()”,我就插入一行来写入日志文件。日志写在我的开发机器上,但不在Web服务器上。其他两个回发都按预期工作。
页面脚本
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内容。 (所以我点击“提交”,它变为“处理”标签)。我不明白为什么会引起任何问题,但认为值得一提。
答案 0 :(得分:0)
我最终弄清楚发生了什么......
动态创建的链接按钮正在执行回发作为其服务器单击(onClick)事件的一部分(尽管我没有将任何事件绑定到它)。在我的开发机器上,OnClientClick事件回发击败了OnClick回发,因此所有预期的代码都正常运行。
出于某种原因,一旦部署到服务器,服务器OnClick事件就击败了OnClientClick事件,因此发生了完整的回发,而没有OnClientClick事件提供的额外__EVENTARGUMENT信息。
为了解决这个问题,我发现another post on this site解释了如何取消默认的回发,但仍然执行客户端javascript。
我的服务器端代码现在更新如下:
LinkButton newButton = new LinkButton() {
OnClientClick = "StockINSubmit()",
Text = "Submit",
ID = "lnkStockInSubmit"
};
newButton.Attributes.Add("onClick", "return false;");
PlaceholderStockInSubmit.Controls.Add(newButton);
现在的工作就像一个魅力:)
感谢您的帮助。