【问题标题】:how to use __doPostBack function in asp.net如何在 asp.net 中使用 __doPostBack 函数
【发布时间】:2013-05-03 15:00:02
【问题描述】:

我正在尝试使用__doPostBack 函数,以便我可以强制我的页面在页面加载时进行后期打包,但我在理解上有些困难。

当我在网上查看示例时。单击按钮时,我想回帖,但不确定如何完成后面代码中的代码。

这是我目前所拥有的:

<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”。我需要在后面的代码中做什么,以便它在页面加载时回发?提前感谢您的帮助。

【问题讨论】:

  • 只是不明白为什么如果按钮确实回发,为什么在 JavaScript 中使用 __doPostBack?
  • 为按钮控件编写自己的回发脚本的原因是什么(正如亚历克斯所说的那样发布)?
  • 你想为按钮 OnClick 做一个 PostBack 吗?那是自动发射的。你不需要为它添加额外的代码。
  • 我正在使用 ajax 选项卡容器,由于某种原因它没有进行完整的回发,我相信如果我进行某种回发,我的问题将会得到解决。如果你能帮我解决我的问题,我将不胜感激......谢谢
  • 我在 DetailView 中使用 ajax 工具提示,但在页面加载时,工具提示不显示任何文本,但是当我在 detailview 中回帖时,工具提示会显示文本或描述跨度>

标签: c# javascript asp.net postback


【解决方案1】:

场景 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
    }
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @moe,不一定。据我所知,请求对象在所有页面生命周期中都可用。
    【解决方案3】:

    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)
    

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

    更新

    这是一个示例,说明如何调用在服务器端为您创建的 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 事件中,那么它会在页面完成加载时被调用。但就像我在评论中提到的那样,你必须小心,因为你最终可能会出现无限循环。

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

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

    【讨论】:

    • 谢谢瑞克。我似乎无法遵循代码,如果您能举例说明,将不胜感激。当单击按钮时,我正在尝试做的所有其他回发。
    • 我刚刚重新阅读了您的问题,以了解您将如何实现此代码并在页面加载中了解有关执行此操作的部分。那么当页面加载时,您希望它自动执行 PostBack 吗?那是对的吗?如果是这样,你必须小心,b / c我认为这可能会让你陷入无限循环;如果加载页面,发回,再次加载页面,再次发回等。您尝试强制回发的目标是什么?您上面的评论提到了单击按钮时的回发,这就是我感到困惑的原因。
    • 我想尝试您的方法,但不知道如何遵循并尝试它。这是我的问题,javascript在哪里,我需要在哪里将此代码放在按钮单击方法或页面加载上,这就是为什么我对如何尝试并查看它是否有效感到困惑。我是新手,所以请原谅我在这方面缺乏技能。谢谢。
    • 没问题 - 刚刚为我的答案添加了更新。不确定它是否会对您有所帮助,但我尝试举例说明您将如何调用我在服务器端代码中创建的 javascript 函数。
    【解决方案4】:

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

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

    在哪里

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多