【发布时间】:2012-11-22 00:59:53
【问题描述】:
我正在尝试实现手动回发以触发未附加到控件的代码。我不想使用 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 内容。 (所以我点击“提交”,它变为“处理”标签)。我看不出这会导致任何问题的原因,但认为值得一提。
【问题讨论】:
-
不知道,但是一旦我尝试调用 __doPostBack 才意识到 __doPostBack 仅在存在需要 JS 回发模拟器的控件时才会呈现。所以我在页面上添加了一个链接按钮。检查 __doPostBack 是否在呈现的标记中。
-
我已经回答了一个关于如何使用托管代码正确创建 __doPostBack 的问题:stackoverflow.com/questions/10483271/…
-
@MatthewMartin __doPostback 确实被渲染到页面上,因为我有很多与它们相关联的回发控件。
-
@CAbbott 我看了这个,但是如何获得一个事件的 PostBackEventReference(没有控制)。尝试此操作时出现编译错误
-
拥有一个动态添加的控件确实让它变得更加棘手。有一个控件(LinkButton),但我猜您需要为动态添加的控件使用 PostBackEventReference。
标签: asp.net dopostback