asp.net - 使用 js 执行 AsyncPostBack
Posted
技术标签:
【中文标题】asp.net - 使用 js 执行 AsyncPostBack【英文标题】:asp.net - do AsyncPostBack using js 【发布时间】:2011-12-12 21:50:16 【问题描述】:我为以下案例花费了将近 3 个小时:
我想从 javascript 触发 AsyncPostBack,但也能够发送相同的参数,因为我在服务器端需要它。我尝试了很多情况,但找不到一个明确的例子。
我有一个更新面板,当我按下其中的特定图像按钮时,会显示一些弹出窗口。 (弹出窗口最初是隐藏的,当请求完成时,display:none
被删除=>它看起来很好)
function BeginRequestHandler(sender, args)
function EndRequestHandler(sender, args)
document.getElementById('popup').style.display = '';
document.getElementById('overlay').style.display = '';
好吧,问题是我需要创建一个 js 函数来执行 asyncPostBack,因为 当单击该控件的某些部分时,该 js 函数将从 Flash 控件中调用,所以我想模拟我的单击图像。(因为单击此弹出窗口会显示如上所示)
问题是我无法在任何地方找到这样的示例。 这个 js 函数将接收一个参数,所以当我进行回发时,我希望能够在服务器端获取该参数。(这个参数似乎是主要问题 =- 我如何将它发送到我在做回发时的服务器?)。
对不起,如果我不是很清楚,但你能给我一些关于这个或例子的文档吗?
非常感谢!
更新: 请注意我已经完成的第一个案例,在我的 UpdatePanel 中使用了 ImageButton:
<asp:ImageButton ID="lnkDetails" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Logo") %>'
AlternateText='<%# DataBinder.Eval(Container.DataItem, "Name") %>' OnCommand="lnkDetails_Command"
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "TenantID") %>' Text="Click">
</asp:ImageButton></li>
我只需要“模拟”这个点击,使用 javascript 进行异步回发(因为当我从 flash 调用时,flash 控件将调用我的 js 方法进行回发)
【问题讨论】:
【参考方案1】:从 javascript 启动异步回发:
__doPostBack(target,args)
target 是您要定位的 UpdatePanel 的 UniqueID。通常只传递一个空字符串就可以正常工作(将刷新所有自动更新面板)。
第二个参数是你可以随意使用的参数。
两者都将在服务器上提供给您:
Request.Form["__EVENTTARGET"]
Request.Form["__EVENTARGUMENT"]
【讨论】:
【参考方案2】:这应该很好用:
<asp:ImageButton ID="ImageButton1" runat="server" OnClientClick='return doSomething(<%#Eval("SomeValue")%>);' />
编辑:尝试用这个包装你的 JavaScript 函数:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function ()
doSomething = function(argument)
__doPostBack("<%=ImageButton1.ClientID%>", argument);
return true; //don't know if you need this
);
编辑:检查您的ScriptManager
并确保EnablePartialRendering
设置为true。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" ... />
在代码隐藏中:
protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
//call the RaisePostBack event
base.RaisePostBackEvent(source, eventArgument);
if (source == ImageButton1)
string arg = eventArgument;
【讨论】:
谢谢!但是有什么方法可以避免页面完全刷新吗?因为我试过doPostBack,整个页面都刷新了…… 嗯...它应该是异步的,因为 ImageButton 在更新面板中。你能发布你的标记吗? 谢谢詹姆斯,请看我的更新。基本上,你放在这里的我已经做了。现在我只想制作一个 js 方法来模拟所有这些东西(执行 asyncPostBack,发送特定参数,以便我能够在服务器端捕获该参数)。 一个小问题?你能告诉我方法中的sender
我必须声明吗?
抱歉,应该是source
而不是sender
。我的错。以上是关于asp.net - 使用 js 执行 AsyncPostBack的主要内容,如果未能解决你的问题,请参考以下文章