2 votes

Manipuler Form.Action

Je dois utiliser Form.Action pour rediriger vers un script qui va récupérer des valeurs de ma page. Il est bon de noter que ce script est externe.

Mon problème est que je veux également que le bouton cliqué, auquel l'Action est liée, exécute également certaines fonctionnalités dans le code en premier.

Y a-t-il un moyen de :

Dans le gestionnaire d'événements de clic des boutons, puis-je définir Form.Action et ensuite appeler quelque chose comme Form.Submit?

OU

Configurer Form.Action à l'avance et ensuite faire en sorte que le bouton revienne avant que l'action ne se produise.

Si ce n'est pas possible, des conseils dans la bonne direction sur la manière dont je peux y parvenir seraient appréciés.

3voto

Harsh Baid Points 3949

Si la page n'a pas besoin de valider/de traiter côté serveur lorsque l'utilisateur clique sur le bouton, vous pouvez le faire comme suit :

En ASPX :

S'il y a quelque chose à traiter/valider côté serveur, faites le comme suit :

En ASPX :

Dans le code-behind de la page :

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Page.Validate(); // Valider ou effectuer d'autres traitements
    if(Page.IsValid)
    {
         Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "$('form').get(0).setAttribute('action', 'URLActionScript'); $('form').submit();", true);
    }
}

1voto

PCasagrande Points 2139

Est-ce que vous vous souciez de ce que fait le formulaire soumis? Si tout ce qui doit être fait est de le soumettre, vous pouvez construire les données soumises POST à l'intérieur de votre événement de clic sur le bouton et les envoyer sans jamais rediriger l'utilisateur et continuer le traitement de votre code.

Il existe une documentation utile sur une façon de le faire ici, bien qu'il existe plusieurs façons de le faire.

Typiquement, vous construiriez vos données POST avec un générateur puis les enverriez. Voici un exemple :

// Créez une nouvelle instance de WebClient pour envoyer les données
WebClient myWebClient = new WebClient();

// Collection pour contenir nos données de champ
NameValueCollection postValues = new NameValueCollection();

// Ajoutez les paires paramètre/valeur nécessaires au conteneur nom/valeur.
postValues.Add("LoginName", tbLoginName.Text);
postValues.Add("Password", tbPassword.Text);

// Envoyez le message
byte[] responseArray = myWebClient.UploadValues("http://site web.com", postValues);

// Décoder et afficher la réponse.
tbResponse.Text = Encoding.ASCII.GetString(responseArray);

Ce code n'est qu'une maquette mais il devrait vous orienter dans la bonne direction si c'est le chemin que vous voulez prendre.

0voto

scartag Points 9312

Vous pourriez faire ce dont vous avez besoin dans le code derrière, puis appeler Server.Transfer (string url, bool preserveFormVariables); pour déplacer la requête vers une autre page à gérer.

Vous pouvez ensuite utiliser Request.Form sur l'autre page pour récupérer les valeurs dont vous avez besoin.

0voto

deostroll Points 3586

Cela est tout à fait possible en définissant la propriété PostBackUrl pour tout contrôle de bouton (comme un bouton asp.net ou un bouton de lien). Pour une preuve de concept, faites ce qui suit :

  1. Créez un projet de service web asmx ; Ajoutez une webmethod appelée SayHello. Elle acceptera un argument - Username et renverra Hello au client appelant.
  2. Exécutez ce service web. Supposons que son URL soit quelque chose comme http://localhost:6107/DemoAsmx/demo.asmx
  3. Ouvrez une autre instance de Visual Studio. Créez un projet web normal. Ajoutez une page aspx. Ajoutez un champ de texte. Définissez son ID sur Username
  4. Ajoutez un bouton à la page. Définissez sa propriété PostBackUrl sur http://localhost:6107/DemoAsmx/demo.asmx/SayHello
  5. Exécutez le projet web. Maintenant, saisissez un nom dans le champ de texte, et cliquez sur le bouton. Vous verrez la réponse XML du service web asmx.

Ceci peut aussi être réalisé via JavaScript. J'espère que cela vous aide.

0voto

PCasagrande Points 2139

Étant donné que la page doit être soumise à la page qui n'est pas sous votre contrôle, je recommanderais de créer un service web lié au clic sur le bouton. En utilisant du code comme celui-ci, vous pouvez créer des événements javascript qui se produisent avant la soumission de la page :

btnSubmit.Attributes.Add("onclick", "javascript:functionName()")

Remplacez functionName par le nom de la fonction que vous appelez dans votre service web. Cela vous permet également d'annuler la soumission du formulaire en fonction des résultats du service web en faisant :

return false;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X