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

本文关键字:doPostBack 函数 asp net | 更新日期: 2023-09-27 18:12:13

我试图使用__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"。我需要做什么在后面的代码,所以它张贴回页面加载?提前感谢您的协助。

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

场景1

如果你想使用JavaScript函数来触发回发,你需要用OnClientClick替换OnClick。像这样修改按钮定义(我已经假设它嵌套在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");

Net为您提供了一种方法来构建调用以从javascript执行PostBack。

ClientScriptManager。GetPostBackEventReference方法将构建您需要在javascript中使用的代码,以便从特定控件执行PostBackhttp://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)

希望这就是你想要的。

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

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

我只是做了一个普通的HTML按钮(而不是使用ASP。Net按钮),因为我不想让按钮PostBack的概念与它混淆。这是一个简单的HTML按钮,除了您为它编写的程序之外,它什么也不做。由于我已经向onclick添加了javascript函数调用,因此当您按下按钮时,它将执行PostBack。当这个PostBack发生时,它就像点击了"MyButton"按钮一样;这就是ASP。Net按钮,你在页面上的某个地方。由于该按钮是ASP。. Net按钮,它已经在自己做一个PostBack,这就是为什么我认为有一些混乱,为什么你要寻找触发一个PostBack编程。

你也可以在代码中直接调用javascript函数,如…

<script>
handleDoPostBack();
</script>

这将在代码遇到它时立即发生。或者,如果将它放在onload事件中,那么它将在页面加载完成时被调用。但就像我在评论中提到的,你必须小心,因为你可能会以一个无限循环结束。

通过阅读您在其他回答中的一些评论,您试图解决的问题似乎与您正在使用的AJAX面板有关。我不熟悉那些,所以我不知道为什么它不适合你,我不知道是否触发PostBack编程会解决你的问题。

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

下面的代码可以让我使用c#进行回发。请注意,我没有使用'MyArgument'参数并将其保留为空

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

,

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

希望这对你有帮助!