ASP.NET: comment rediriger, pré-remplir les données du formulaire?

je veux un gestionnaire pour rediriger vers une page Web-formulaires, pré-remplir les valeurs de certains contrôles sur le formulaire.

j'ai essayé de configurer ma requête actuelle .Formulaire données:

if (theyWantToDoSomething)
{
   //pre-fill form values
   context.Request.Form["TextBox1"] = "test";
   context.Request.Form["ComboBox1"] = "test 2";
   context.Request.Form["TextBox2"] = GetTheTextForTheThing();

   //tell the client to go there
   context.Response.Redirect("~/SomeWebForm.aspx");
   return;        
}

mais je reçois une exception que forme valeurs sont en lecture seule.

Comment envoyer le client à une autre page, pré-remplir les données du formulaire?


réponse

j'ai utilisé L'état Session pour stocker des valeurs. Il est important de noter que par défaut un Handler n'a pas accès à Session (l'objet Session sera null ). Vous devez dire à IIS de vous donner la Session objet en ajoutant le IRequiresSessionState marqueur d'interface à votre classe handler:

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
   public void ProcessRequest(HttpContext context)
   {
      ...
      if (theyWantToDoSomething)
      {
         //pre-fill form values
         context.Session["thing1"] = "test";
         context.Session["thing2"] = "test 2";
         context.Session["thing3"] = GetTheTextForTheThing();

         //tell the client to go there
         context.Response.Redirect("~/SomeWebForm.aspx");
         return; //not strictly needed, since Redirect ends processing
      }
      ...
   }
}
2
demandé sur Community 2009-06-27 01:13:06

3 réponses

vous ne pouvez remplir que votre réponse, la demande est entrée des données et est en effet en lecture seule.

si vous utilisez ASP.NET il y a plusieurs façons d'accomplir ce dont vous avez besoin:

  • le meilleur moyen serait probablement de transmettre les données dont vous avez besoin pour être pré-rempli à une forme quelconque.aspx via L'objet Session, et sur cette méthode de chargement des pages, remplissez votre formulaire. Gardez à l'esprit que lorsque vous faites la réponse.Redirection, une 302 la réponse est envoyée au client avec L'URL à laquelle le client doit rediriger. Le processus est transparent pour l'utilisateur...mais il s'agit d'un voyage aller-retour complet.

  • une autre alternative à la population de la Session des utilisateurs serait d'ajouter les paramètres GET via une chaîne de requête à la redirection vers SomeWebForm.aspx.

  • si vous avez besoin de transférer le traitement à la forme Someweb.page aspx, sans aller-retour, vous pourrait utiliser le Serveur.Transfert. Ceci transférera l'exécution de la page courante à la page que vous choisissez...cependant, cela peut causer un comportement étrange du côté du client parce que L'URL ne se met pas à jour. Aussi loin que l'utilisateur est concerné, il apparaîtra comme si ils sont sur la même page qu'ils ont commencé.

7
répondu jrista 2009-06-26 21:21:38

quelques idées qui pourraient vous aider à démarrer:

  1. passer les valeurs dans la chaîne de requête
  2. stocker les valeurs dans l'état session ou dans un cookie séparé
  3. stocke les valeurs dans HttpContext.Les éléments et l'utilisation du Serveur.Transférer au lieu de répondre.Redirection
3
répondu Jørn Schou-Rode 2009-06-26 21:18:55

une autre approche qui n'a pas encore été mentionnée est L'utilisation du serveur.Le transfert permet d'utiliser la Page .PreviousPage propriété , permettant l'accès aux contrôles sur la page qui a transféré le contrôle.

comme jrista l'a mentionné cependant, L'utilisation de transfert ne met pas à jour l'URL affichée à l'utilisateur, qui peut ou non être un problème. Par exemple, un utilisateur ne peut pas marquer précisément une page à laquelle il a été transféré puisque L'URL sera celle du page de transfert originale.

1
répondu Ahmad Mageed 2009-06-28 20:57:24