2011-09-08 4 views
2

J'utilise C#, MVC3 et Razor.MVC3 - Redirection URL dynamique en Javascript

J'ai une fonction javascript (dans la vue) qui est appelée quand un élément de menu particulier est cliqué. Dans cette fonction, je dois créer une nouvelle URL avec des paramètres (en fonction d'autres sélections sur l'écran) et rediriger vers celle-ci. Il veut faire quelque chose comme ceci:

ValueA et ValueB sont des variables dans la section javascript et sont remplis avec des valeurs.

function doSomething(ID) { 
    location.href = "../Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB; 
    } 

Cependant, en raison de la nature de MVC que je dois faire que l'URL est toujours raison, peu importe la façon dont l'utilisateur a à la page. J'ai essayé d'utiliser @ Url.Content (« ») (voir bloc de code suivant), mais la question que je cours dans est:

  • Le nom « ID » n'existe pas dans le contexte actuel
  • Le nom « ValueA » n'existe pas dans le contexte actuel
  • le nom « ValueB » n'existe pas dans le contexte actuel

Voici un exemple de ce que je voudrais faire, mais obtenir les erreurs mentionnées ci-dessus sur :

function doSomething(ID) { 
    location.href = @Url.Content("~/Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB); 
    } 

Comment puis-je faire ce travail? Y a-t-il un meilleur moyen?

Merci, Tony

Répondre

6

Vous devez concaténer la partie statique à la partie dynamique:

location = "@Url.Content("~/Area/Controller/Action")?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB; 

Le "@...?ID=" externe est une chaîne littérale Javascript.
@Url.Content("...") est un code côté serveur qui émet du texte brut dans le littéral Javascript.

+0

Fonctionne bien! Cela a beaucoup de sens. Je souhaite avoir pensé à cela. –

+3

BTW, vous devriez appeler '@ Url.Action' au lieu de' Content'. – SLaks

+0

Merci. J'ai modifié le code pour utiliser '@ Url.Action' car il est dans le même contrôleur que la vue actuelle. Fonctionne très bien. –