2009-11-30 3 views
0

J'utilise ASP.NET 3.5.Ajouter PostBackURL au bouton et autoriser le code derrière le bouton?

J'ai un bouton appelé btnSubmit et sur ce bouton dans le PostBackURL j'ai une URL à laquelle la page doit soumettre des données.

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

Maintenant, quand j'ai ce que je ne peux pas Excecute plus de code en cas de clic de bouton comme si .....

Protected Sub btnSubmit_Click(ByVal sender As Object, 

    Dim name as String 
    name = "HELP" 

End Sub 

Pourquoi cela et comment puis-je faire un code PostBackUrl et encore Excecute quand le bouton est cliqué?

Note: L'URL Postback est situé à un autre compnay qui capture les données

Répondre

0

Pouvez-vous faire?

<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 
+0

Non, il ne fonctionne pas comme les besoins d'URL ne peuvent pas être utilisés comme Server.Transfer (Situé ot une autre société) ou Repose.Redirect (les données ne sont pas transférées alors) – Etienne

0

Pourriez-vous faire la manipulation que vous devez faire en Javascript avant de lancer la publication sur l'autre serveur?

Sinon, vous ne pouvez pas définir le PostBackURL si vous souhaitez que la page soit d'abord renvoyée à votre serveur afin que vous puissiez exécuter votre code. Vous pourriez être en mesure de forcer une deuxième publication après l'exécution de votre code en procédant comme suit:

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

À condition que le formulaire connaisse l'URL correcte à publier dans ce cas.

+0

Non non non non ...: | Ne faites pas cela. Utilisez RegisterStartupScript et GetPostBackEventReference pour ce genre de chose. – Bryan

+0

Cependant ... l'idée est valide. Je vais éditer ma réponse. – Bryan

1

Vous devez aborder cela d'une manière différente. La propriété PostBackUrl signifie que votre navigateur ne reçoit aucune notification du navigateur de l'utilisateur indiquant qu'il se dirige désormais vers une nouvelle URL. Il est donc impossible de déclencher un événement.

Deux options:

1) Ajouter un gestionnaire OnClientClick avec un appel AJAX pour faire un peu de traitement du serveur.

2) Capturez les données dont vous avez besoin dans une publication locale et envoyez-la d'une autre manière au nouveau serveur via Request.Redirect ou Server.Transer.

3) Comme le suggère bwarner, vous pouvez avoir votre publication de page sur votre propre serveur, puis provoquer automatiquement une autre publication. Supprimez d'abord le PostBackUrl dans l'aspx. Ensuite, ajoutez quelque chose comme ceci dans votre gestionnaire de bouton:

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, "")); 
} 

Bien que ... Pour être honnête, je ne suis pas tout à fait sûr GetPostBackEventReference honore la propriété PostBackUrl. Faites-nous savoir si vous comprenez cela. :)

+0

Non, cela n'a pas fonctionné pour moi ......... – Etienne

+0

GetPostBackEventReference génère-t-il le même code, qu'il existe ou non un jeu PostBackUrl? Je pense que cela serait considéré comme un bug. – Bryan

0

Qu'en est-il de ne pas utiliser de code côté client et de simplement créer le côté serveur de requête. Vous devrez créer manuellement vos données post mais je pense que cela fonctionnerait:

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