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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET相关事件及JS的执行顺序

在ASP.NET MVC4中如何执行远程验证?

兔子--html,js,php,ASP,ASP.NET,JSP的关系

asp.net 查询超大数据量,怎样执行效率更快??

在 ASP.NET MVC 中自动版本化 CSS/JS?

ASP.NET MVC 中用于 CSS / JS 文件的自动版本控制?