2009-03-16 6 views
0

Dans ma page maître, j'ai un menu déroulant de langue. Lorsque l'utilisateur sélectionne une langue dans la liste déroulante, un envoi envoie la langue actuellement sélectionnée à la méthode "Translate" dans mon contrôleur. Après quoi, il devrait rediriger vers l'url, il était avant la traduction de soumettre afin qu'il puisse montrer exactement la même page, mais maintenant dans la nouvelle langue sélectionnée.Mettre les valeurs de route actuelles/url dans le formulaire

Comment est-ce que je ferais mieux de faire ça? Dois-je envoyer l'url actuelle dans un champ caché? Ou puis-je peut-être envoyer le routevaluedictionary actuel, donc ma méthode de traduction peut redirectToRoute directement?

Ou peut-être y a-t-il un tout meilleur moyen?

--EDIT--
Parce que je veux mes favoris pour inclure la langue du site aussi, toutes mes actions exposées ont un paramètre siteLanguage aussi. Si je pouvais en quelque sorte montrer efficacement à l'utilisateur un tas de liens réguliers (GET) où le paramètre siteLanguage est rempli avec la valeur pertinente, ce serait encore mieux. Mais pour autant que je sache, il n'y a aucun moyen de mettre des liens dans une liste déroulante, sauf avec Java peut-être.

Répondre

1

J'ai une situation similaire, et je l'ai résolu légèrement différemment. Parce que ma page maîtresse avait fonctionnalité, j'ai créé une nouvelle classe de contrôleur de base (qui hérite de Controller) et tous mes contrôleurs réels héritent de ma classe personnalisée. Puis, j'implémente OnActionExecuting dans la classe de base pour faire un travail commun.

Ensuite, dans votre masterpage, si vous avez une forme comme celui-ci, il soumettra à l'URL actuelle avec une requête GET et ajouter la langue en tant que paramètre querystring:

<form id="language" method="get" > 
    <select name="language"> 
     <option value="en">English</option> 
     <option value="es">Spanish</option> 
     ... 
    </select> 
</form> 

Utilisez jQuery pour câbler jusqu'à autosubmit, etc.

Vous pouvez rechercher un paramètre de langue dans la chaîne de requête de votre classe de contrôleur de base et définir l'indicateur indiquant à la méthode de contrôleur réel quelle langue utiliser. Dans le modèle, vous allez directement sur le vrai contrôleur pour régénérer la page et éviter une redirection. Remarque: cela ne fonctionne que de manière universelle si vous n'utilisez pas déjà les paramètres de chaîne querys.

Si cela ne fonctionne pas pour vous, vous pouvez également utiliser votre méthode actuelle, mais inclure l'URL pour être redirigé vers dans un champ caché comme celui-ci:

<%= Html.Hidden("redirect", Request.Url %> 
+0

J'ai déjà un contrôleur de base personnalisé, donc je pourrais vérifier cela –

+0

Je ne savais pas que vous pouviez laisser l'action vide. Des trucs géniaux. –

0
public ActionResult Translate(string _lang){ 
     switch(_lang){ 
      case "English": 
        return View("English"); 
      case: "French": 
        return View("French"); 
      default: 
        return View("English"); 
} 

Personnellement, je le faire comme ça

+0

mais qu'est-ce que ce point de vue être? Je n'ai pas 1 page à traduire, j'en ai beaucoup et leur URL varie d'un cas à l'autre. –

0

je mettrais l'url de retour dans la chaîne de requête, comme l'authentification des formulaires fait quand il redirige vers la page de connexion.

Incluez returnUrl dans les routesValues ​​lorsque vous faites votre demande de traduction.

Questions connexes