2009-06-15 4 views
4

J'ai un vrai problème simple, mais n'arrive pas à le comprendre..NET MVC jQuery chemin relatif pour window.location

Ce qui suit ne fonctionne pas en raison de la façon dont MVC construit l'URL (il inclut toutes les informations d'itinéraire). Je veux que pathname retourne uniquement le chemin du répertoire virtuel. Tout ce que je fais est de rediriger vers un itinéraire différent lorsqu'un utilisateur sélectionne un ID dans une liste déroulante.

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = window.location.pathname + "/CeuTransaction/Index/" + $('#TransactionIds').val(); 
    }); 
}); 

Répondre

9

Utilisez UrlHelper pour créer le chemin. Il prendra en compte l'emplacement de l'application par rapport à la racine du serveur web.

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = '<%= Url.Action("Index", "CeuTransaction") %>' 
          + '/' 
          + $('#TransactionIds').val(); 
    }); 
}); 

Alternative: divisée en deux parties de sorte que la fonction peut être incluse dans une bibliothèque javascript (doit encore être invoqué à la vue ou le maître). Avec un peu de travail, vous pourriez aussi en faire une extension jQuery.

function redirectOnChange(selector, action) 
{ 
    $(selector).change(function() { 
     document.location = action + '/' + $(selector).val(); 
    }); 
} 

De l'avis:

$(function() { 
    redirectOnChange('#TransactionIds', 
        '<%= Url.Action("Index", "CeuTransaction") %>'); 
}); 
+0

Toutes mes excuses. J'ai oublié de mentionner que ce script est contenu dans une bibliothèque de scripts et non sur la page elle-même. – Rake36

+0

Mise à jour ma réponse avec un travail autour. – tvanfosson

+0

Merci. Du point de vue du style, j'essaie toujours de supprimer complètement les JS intégrés de mes pages Web. J'aime votre solution et je vais voir si je ne peux pas l'utiliser pour trouver quelque chose avec lequel je me sens plus à l'aise. Je suis également un utilisateur de prototype.js qui étudie jQuery - donc pas au courant de toutes les possibilités disponibles. – Rake36

6

Voici ce que je fini par faire.

Ajout d'un champ de texte caché à la page:

<input type="hidden" value="<%= Url.Content("~/CeuTransaction/Index/") %>" id="pathname" /> 

utilisé ce qui suit dans la bibliothèque de scripts js:

// The following line enables jQuery intellisense 
/// <reference path="jquery-1.3.2-vsdoc.js" /> 

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = $('#pathname').val() + $('#TransactionIds').val(); 
    }); 
}); 
+0

Pour les utilisateurs de MVC3 utilisant le moteur de rasoir, cette ligne est '' –

Questions connexes