2009-10-14 6 views
1

Nous effectuons une ancienne section reskin qui est écrite en ASP classique et qui est en cours de refonte dans Asp.net MVC. Le contenu de certaines pages doit juste être tiré dans une nouvelle mise en page. J'ai donc écrit une méthode d'aide qui lit essentiellement le fichier ASP et rend le contenu dans la vue actuelle.Transmettre les données postées du formulaire MVC à une page ASP

public static string readHtmlPage(string url) 
     { 

      try 
      { 

      string host = HttpContext.Current.Request.Url.Host; 

      url = "http://" + host + url; 

      WebResponse objResponse; 

      WebRequest objRequest = System.Net.HttpWebRequest.Create(url); 

      objResponse = objRequest.GetResponse(); 

      StreamReader sr = new StreamReader(objResponse.GetResponseStream()); 

      return sr.ReadToEnd(); 

      } 
       catch (Exception ex) 
      { 
       return "If include file cannot be found you will see this message. This is temporary:" + url; 
      } 
     } 

et sa grande et travaille pour la majorité des cas de pages quand je dois passer les chaînes de requête dans les urls.

Cependant, j'ai une page contact.asp qui est un formulaire qui enregistre à lui-même pour faire la validation avant d'envoyer l'e-mail ou quoi que ce soit.

Y a-t-il un moyen que je peux juste faire publier sur le mvc, puis passer les données post?

Actuellement, je fais cela pour les pages que je dois passer quelques informations à

<%=IncludeHelper.readHtmlPage("/press_room/recent.inc.asp?type="+ ViewData["type_id"]) %> 
+0

Je ne peux pas recommander cette façon d'inclure le contenu. Pourquoi ne pas simplement utiliser un IFrame pour des pièces que vous ne pouvez pas reconstruire dans MVC? Faire une demande Web de MVC à un autre serveur Web pour rendre le contenu semble inefficace, et vous demandez des problèmes pour les scénarios de formulaire. – calebt

+0

en fait, il est sur le même serveur donc c'est un peu comme faire du côté serveur inclure. Je ne l'aime pas particulièrement, mais dans les circonstances, c'est ce que je dois faire pour répondre aux exigences et aux délais. –

+0

Non, ce n'est pas quelque chose comme faire un SSI. Bien que vous n'ayez pas de latence de réseau dans ce cas, vous continuez à faire une requête http et à restituer la réponse dans votre flux, bloquant les threads sur votre serveur tout le temps. Au moins cache-le homme. –

Répondre

1

Lorsque vous prenez la StreamReader de contact.asp, il n'y a rien sur cette page qui est plus ASP classique - il est juste HTML Ainsi, vous pouvez modifier l'action du formulaire pour publier, par exemple, une action d'un contrôleur MVC, puis analyser les données de formulaire à cet endroit (vous devrez probablement utiliser le bon vieux answer.redirect pour cela, en fonction du contact. les noms d'entrée de formulaire d'asp).

Vous aurez besoin d'analyser le contenu HTML de StreamReader pour ce faire, ce qui peut être trivial, ou pourrait être difficile, selon le balisage. De plus, vous devrez dupliquer la fonctionnalité de validation et la fonctionnalité de messagerie/persistance dans l'application MVC (ce que les bonnes pratiques recommandent devraient être dans votre modèle, vous devrez donc dupliquer le modèle de votre application ASP également , si vous en avez un).

+0

cela n'aurait pas de sens pour moi dans ce cas, car si je vais dupliquer la fonctionnalité de validation, je pourrais aussi bien refaire tout le formulaire pour travailler sous mvc. Merci pour votre contribution si. –

+0

bien vous pouvez également passer le formulaire à l'action MVC après la validation - cela vous obligerait à changer le code dans la page ASP classique pour faire une demande server.transfer ou xmlHttp (http://stackoverflow.com/questions/ 381596/asp-equivalent-de-curl-not-asp-net) –

Questions connexes