asp.net - 使用js做AsyncPostBack

时间:2011-10-21 21:13:53

标签: javascript asp.net ajax asp.net-ajax

我花了将近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方法进行回发)

2 个答案:

答案 0 :(得分:2)

从javascript发起异步回发:

__doPostBack(target,args)

target是您要定位的UpdatePanel的UniqueID。通常它只能传递一个空字符串(将刷新所有自动更新面板)。

第二个参数是可以用于任何你想要的参数。

服务器上都可以使用这两种方法:

Request.Form["__EVENTTARGET"]
Request.Form["__EVENTARGUMENT"]

答案 1 :(得分:1)

这应该很有效:

<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;
    }
}