繁体   English   中英

如何在asp.net中使用__doPostBack函数

[英]how to use __doPostBack function in asp.net

我正在尝试使用__doPostBack函数,所以我可以强制我的页面在页面加载上做post pack但我有一些困难的理解。

当我在网上看这些例子的时候。 点击按钮,我想回发帖但不知道如何完成后面代码中的代码。

这是我到目前为止:

<script type="text/javascript">
        function DoPostBack() {
            __doPostBack('btnNew', 'MyArgument');
        }
    </script>

这是我的按钮

 <asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" OnClick="DoPostBack()" Text="Create" />

我似乎不明白在后面的代码中使用“MyArgument”。 我需要在后面的代码中做什么,所以它会在页面加载上回发? 在此先感谢您的帮助。

场景1

如果要使用JavaScript函数触发回发,则需要将OnClick替换为OnClientClick 像这样修改按钮定义(我已经假设它嵌套在UpdatePanel ):

<asp:Button ID="btnNew" 
    runat="server" 
    CausesValidation="False" 
    CommandName="New" 
    OnClientClick="DoPostBack();" 
    Text="Create" />

在后面的代码中,在Page_Load方法中,读取Request["__EVENTTARGET"]Request["__EVENTARGUMENT"]

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        if (Request["__EVENTTARGET"] == "btnNew" && 
            Request["__EVENTARGUMENT"] == "MyArgument")
        {
            //do something
        }
    }
}

情景2

如果您不一定要使用JavaScript ,请修改按钮的定义,如下所示:

<asp:Button ID="btnNew"
    runat="server"
    CausesValidation="False"
    CommandName="New"
    OnClick="DoPostback"
    CommandArgument="MyArgument"
    Text="Create" />

然后,在后面的代码中添加以下方法:

protected void DoPostback(object sender, EventArgs e)
{
    var target = ((Button)(sender)).ClientID; //"btnNew"
    var argument = ((Button)(sender)).CommandArgument; //"MyArgument"
    if (target == "btnNew" &&
        argument == "MyArgument")
    {
        //do something
    }
}

作为参数传递给函数__doPostBack的值将作为名为__EVENTTARGET__EVENTARGUMENT请求参数发送到服务器。 ASP.NET使用这些值来确定触发事件的控件以及应将哪些参数作为EventArgs对象传递。 但您可以使用对象HttpRequest直接访问它们:

string eventTarget = this.Request.Params.Get("__EVENTTARGET");
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT");

ASP.Net提供了一种方法,您可以构建一个从javascript执行PostBack的调用。

ClientScriptManager.GetPostBackEventReference方法将构建您需要在javascript中使用的代码,以便从特定控件执行PostBack http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx

下面是一个例子(在VB.Net中)。 在代码隐藏中,我正在创建自己的javascript函数。 ASP.Net代码将在我的函数中插入javascript代码,以执行“MyButton”控件的PostBack。 构建页面时,此javascript函数将可用。 当javascript代码调用此javascript函数时,它将执行PostBack,它将模仿单击“MyButton”按钮时发生的操作。

Dim csm As ClientScriptManager = Page.ClientScript
Dim sb As New StringBuilder
sb.AppendLine("function handleDoPostBack() {")
sb.AppendLine(csm.GetPostBackEventReference(MyButton, ""))
sb.AppendLine("}")
csm.RegisterClientScriptBlock(Me.Page.GetType, "js_code__create_functions", sb.ToString, True)

希望这就是你要找的东西。

UPDATE

这是一个如何调用在服务器端为您创建的javascript函数的示例。

<input type="button" value="Click Me" onclick="handleDoPostBack();" />

我只是制作了一个常规的HTML按钮(而不是使用ASP.Net按钮),因为我不想让按钮的概念与PostBack混淆。 这只是一个HTML按钮,除了您要编程的内容之外什么都不做。 由于我已经将javascript函数调用添加到onclick,然后当您按下按钮时,它将执行PostBack。 当发生这个PostBack时,它会像点击“MyButton”按钮一样; 这将是一个ASP.Net按钮,你在页面的某个地方。 由于该按钮是一个ASP.Net按钮,它本身就已经自己做了一个PostBack,这就是为什么我认为你为什么要以编程方式触发PostBack的原因有些混乱。

您也可以直接在代码中调用javascript函数,因此......

<script>
handleDoPostBack();
</script>

一旦代码遇到它,就会发生这种情况。 或者,如果将它放在onload事件中,那么在页面加载完成后会调用它。 但就像我在评论中提到的那样,你必须要小心,因为你最终会得到一个无限循环。

通过阅读其他答案中的一些注释,您尝试解决的问题似乎与您正在使用的AJAX面板有关。 我不熟悉那些,所以我不确定为什么它不适合你,我不知道是否以编程方式触发PostBack将解决你的问题。

但是,如果您需要以编程方式触发PostBack,则可以使用此代码。 我在不希望页面上有按钮的情况下使用它,但我想要一个动作发生。 当我的页面上发生其他事情时,我会运行一些javascript代码,就像点击一个按钮一样 - 我可以在服务器端处理该按钮。 在我的ASP.Net页面中,我确实包含了按钮,但后来我使用CSS来隐藏用户看不到按钮。 所以用户没有看到按钮,但我的javascript代码可以调用我的javacript函数,它将模仿单击该按钮。

下面的代码适用于我使用C#进行回发。 注意我没有使用'MyArgument'参数并将其留空

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "DoPostBack", "__doPostBack('dummybtnPivotGridupdate', '')", true);

哪里

<asp:Button ID="dummybtnPivotGridupdate" runat="server" Style="display: none;" ClientIDMode="Static" />

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM