将PostBackURL添加到按钮并允许按钮后面的代码?

时间:2009-11-30 13:17:55

标签: c# asp.net vb.net

我正在使用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并仍然执行代码?

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

4 个答案:

答案 0 :(得分: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属性。如果你想出来,请告诉我们。 :)

答案 1 :(得分:0)

你能这样做吗?

<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

答案 2 :(得分:0)

您可以在启动回发到其他服务器之前,在Javascript中进行操作吗?

否则,如果您希望页面首先回发到服务器,则无法设置PostBackURL,以便您可以运行代码。您可以通过执行类似

之类的操作在代码运行后强制执行第二次回发

回复于( “document.forms [0] .submit();”);

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

答案 3 :(得分:0)

如何不使用任何客户端代码并仅构建请求服务器端。你必须手动建立你的帖子数据,但我认为它会起作用:

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();
}