5

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

4

4 回答 4

4

方案 1

如果你想使用你的 JavaScript函数来触发回发,你需要OnClickOnClientClick. 像这样修改按钮定义(我已经假设它嵌套在一个 中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
    }
}
于 2013-05-03T15:27:33.447 回答
2

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

string eventTarget = this.Request.Params.Get("__EVENTTARGET");
string eventArgument = this.Request.Params.Get("__EVENTARGUMENT");
于 2013-05-03T15:20:42.153 回答
1

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

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

在哪里

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

希望这可以帮助!

于 2014-10-30T07:26:22.680 回答
1

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 事件中,那么它会在页面完成加载时被调用。但就像我在评论中提到的那样,你必须小心,因为你最终可能会遇到一个无限循环。

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

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

于 2013-05-03T16:17:22.317 回答