【问题标题】:Adding PostBackURL to button and allow code behind the button?将 PostBackURL 添加到按钮并允许按钮后面的代码?
【发布时间】:2009-11-30 13:17:54
【问题描述】:

我正在使用 ASP.NET 3.5。

我有一个名为 btnSubmit 的按钮,在 PostBackURL 中的这个按钮上,我有一个页面必须向其提交数据的 URL。

<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="Hand" 
        PostBackUrl="http://now.eloqua.com/e/f2.aspx" />

现在,当我有这个时,我不能像这样在按钮单击事件中执行更多代码.....

Protected Sub btnSubmit_Click(ByVal sender As Object, 

    Dim name as String
    name = "HELP"

End Sub

为什么会这样?如何在单击按钮时执行 PostBackURL 并仍然执行代码?

注意:回发 URL 位于另一个将捕获数据的公司

【问题讨论】:

    标签: c# asp.net vb.net


    【解决方案1】:

    您需要以不同的方式解决这个问题。 PostBackUrl 属性意味着您的服务器不会从用户的浏览器收到任何通知,表明它现在将转到一个新的 URL,因此无法触发事件。

    两种选择:

    1) 添加一个带有 AJAX 调用的 OnClientClick 处理程序来执行一些服务器处理。

    2) 在本地回发中捕获您需要的数据,并通过 Request.Redirect 或 Server.Transer 以另一种方式将其发送到新服务器。

    3) 就像 bwarner 建议的那样,您可以将页面回发到您自己的服务器,然后自动进行另一个回发。首先删除 aspx 中的 PostBackUrl。然后在您的按钮处理程序中添加类似这样的内容:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        name = "HELP";  // your code here
        btnSubmit.PostBackUrl = "http://newserver/page.aspx";
        ClientScript.RegisterStartupScript(this.GetType(), "autopostback", ClientScript.GetPostBackEventReference(btnSubmit, ""));
    }
    

    虽然...老实说,我不完全确定 GetPostBackEventReference 尊重 PostBackUrl 属性。让我们知道您是否解决了这个问题。 :)

    【讨论】:

    • 那么 GetPostBackEventReference 无论有没有设置 PostBackUrl 都会生成相同的代码?我认为这可能是一个错误。
    【解决方案2】:

    你能做到吗?

    <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="Hand" 
            Autopostback="true" />
    Protected Sub btnSubmit_Click(ByVal sender As Object, 
    
        Dim name as String
        name = "HELP"
        Response.Redirect("http://now.eloqua.com/e/f2.aspx")
    End Sub
    

    【讨论】:

    • 不,它不起作用,因为 URL 不能用作 Server.Transfer(位于另一家公司)或 Repose.Redirect(然后数据不传输)
    【解决方案3】:

    在启动回发到另一台服务器之前,您能否在 Javascript 中执行您需要执行的操作?

    否则,如果您希望页面首先回发到您的服务器以便您可以运行您的代码,则您无法设置 PostBackURL。在代码运行后,您可能可以通过执行类似这样的操作来强制进行第二次回发

    Response.Write("document.forms[0].submit();");

    如果表单知道在这种情况下回发到的正确 URL。

    【讨论】:

    • 不不不不... :|不要这样做。对这类事情使用 RegisterStartupScript 和 GetPostBackEventReference。
    【解决方案4】:

    不使用任何客户端代码而只构建请求服务器端怎么样。您必须手动建立您的帖子数据,但我认为它会起作用:

    private void btnSubmit_Click(object sender, System.EventArgs e)
    {
    name = "HELP";  // your code here
    
    //form submit code
    
    //build all your fields into post data
    string field1 = Field1.Text;
    ASCIIEncoding encoding=new ASCIIEncoding();
    string postData="field1="+field1 ;
    byte[]  data = encoding.GetBytes(postData);
    
    // Prepare web request...
    HttpWebRequest myRequest =
      (HttpWebRequest)WebRequest.Create("http://now.eloqua.com/e/f2.aspx");
    myRequest.Method = "POST";
    myRequest.ContentType="application/x-www-form-urlencoded";
    myRequest.ContentLength = data.Length;
    Stream newStream=myRequest.GetRequestStream();
    // Send the data.
    newStream.Write(data,0,data.Length);
    newStream.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多