2010-08-31 5 views
1

J'utilise asp.net mvc. J'ai 4 pages qui montrent la liste des événements (différents types d'événements) et le lien "Détails" sur chaque page mène à la vue "EventDescription.aspx". Le "EventDescription.aspx" a un lien appelé "Retour aux événements" qui doit amener l'utilisateur à la page appropriée. Par exemple: si la requête "Details" provient de la page 1, le lien "Back to Events" doit pointer vers page1.aspx. Idem pour page2.aspx, page3.aspx, page4.aspx. Mon plan est de capturer le nom de la vue (page1.aspx) dans l'action du contrôleur "EventDescription" et de stocker dans ViewData avant d'afficher le "EventDescription.aspx" et l'utilisateur la valeur ViewData pour "Retour aux événements" lien.Obtenir le nom de la vue dans le contrôleur, ASP.NET MVC

Comment obtenir le nom de la vue d'où provient la requête dans une action?

Merci d'avance.

Répondre

0

Je vous suggère d'utiliser TempData au lieu de ViewData. Par exemple, vous pourriez avoir un paramètre comme celui-ci.

public ActionResult Details(int id) 
{ 
    var event = repository.GetByID(id); 
    if (event != null) 
    { 
     TempData["ReturnPath"] = Request.UrlReferrer.ToString(); 
     return View(event); 
    } 
    else { //....... ; } 
} 

Et à votre avis, vous pourriez avoir une ActionLink régulière comme si

<% =Html.ActionLink("Back To Events", TempData["ReturnPath"]) %> 

Si vous voulez être sec, vous pouvez également créer une méthode d'action dans votre contrôleur juste pour gérer les réoriente comme si .

public ActionResult GoBack() 
{ 
    return Redirect(TempData["ReturnPath"]); 
} 

Et à votre avis un ActionLink normal comme si

<% =Html.ActionLink("Back To Events", "GoBack") %> 
2

Lorsque vous rendez la page, vous devez également afficher un lien qui pointe vers la page correcte lorsque vous cliquez sur Retour aux événements. Ceci est mieux configuré dans la méthode du contrôleur, où vous avez facilement accès à toutes les informations nécessaires.

Un moyen facile de faire cela est de mettre les informations de lien de retour dans une variable ViewData
(pseudocode non testé suit). Dans votre méthode de commande:

ViewData["ReturnPath"] = "/Content/Page/1"; 

Et à votre avis:

<% =Html.ActionLink("Back To Events", ViewData["ReturnPath"]) %> 

ou quelque chose de similaire.


Sinon, vous pouvez essayer quelque chose comme

ViewContext.RouteData.Values["action"] 

... si vous ne me dérange pas la chaîne magique là. Cela vous donnera l'action d'appel.

+0

Cette façon dont je dois placer dans 4 méthodes d'action (pour les 4 pages). Je pensais qu'il serait préférable d'avoir à un endroit dans la méthode d'action qui reçoit la demande pour afficher eventDescription.I Utiliser <% = Html.ActionLink ("Retour aux événements", "EventList")%> pour générer des liens, donc juste le nom de la vue est suffisant car tous mes noms de méthode d'action reflètent les noms de vue. – fireBand

1

si vous voulez juste pour obtenir l'URL où vous venez vous pouvez le faire dans votre action

ViewData["ReturnPath"] = this.Request.UrlReferrer.AbsolutePath; 

Cela vous donne l'URL de la page où vous venez. Si votre page1, alors vous allez à EventDescription. Dans votre action EventDescription, votre ViewPath ReturnPath a l'URL de Page1. Ou vice versa.

Questions connexes