2010-10-25 6 views
2

cela peut ou ne peut pas être possible (et pourrait bien être dans les docs mais je l'ai juste manqué).T4MVC url.action dans jquery/view

Comment structurer un Url.Action() dans ma vue en utilisant T4MVC qui me permettra d'utiliser des sélecteurs jQuery. Je suis tenté ce qui suit (dans mon javascript) sans succès:

function cancelHoldBooking() { 
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock($("#propertyid").val())) %>'; 
    // other code omitted for brevity 
} 

je suis en mesure de le faire avec succès les éléments suivants:

function cancelHoldBooking() { 
    var url = '<%= Url.Action("CancelLock", "FundProperty") %>'; 
    url += "?id=" + $("#propertyid").val(); 
    // other code omitted for brevity - in this case 
    // **I could of course have used the**: 
    // var params = {id: $('#propertyid').val()}; 
    // **object** 
} 

Je sais que ce sera un moment de « doh » lorsque le réponse arrive, mais pour la vie de moi, je ne peux pas comprendre cela !!

acclamations ...

[modifier] - je voudrais juste ajouter que si je laisse de côté l'identifiant paramater MVC.FundProperty.CancelLock() et tenter de simplement envoyer l'objet params via l'appel ajax $, le Le compilateur se plaint du paramètre manquant dans l'appel. Je ne peux donc pas contourner le mish-mash javascript en appelant en utilisant l'objet $ ajax params sans paramètre dans l'appel CancelLock(). frustrant :(

Répondre

5

Je pense que vous essayez de mélanger le code client et serveur d'une manière qui ne peut tout simplement pas fonctionner. :) Le bloc <% = ...%> est du code côté serveur pur, donc il peut n'utilisez pas un sélecteur JQuery. Le mieux que vous pouvez faire avec T4MVC pourrait être quelque chose comme:

function cancelHoldBooking() { 
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock()) %>'; 
    url += "?id=" + $("#propertyid").val(); 
} 

Il vous sauve encore des chaînes littérales pour l'action et le nom contrôleur, mais ne vous aidera pas avec le param.

+0

david - Merci pour la réponse. J'avais magiquement juste ajouté un edit pour exprimer un problème avec cette idée juste avant que vous posté :). Bien sûr, je prends à bord le commentaire sur le serveur de mélange et le code côté client .. –

+0

btw - merci pour le modèle T4MVC, il a été réussi à 99% pour moi, sauf un hiccup avec des paramètres jquery (et l'exigence de remplir le paramètre (s) dans la «méthode» T4MVC fortement typée). Je devrais peut-être revenir à ma façon de travailler précédente pour ce type d'action (c.-à-d. où un sélecteur jquery détermine la valeur des paramètres) - mais c'est supportable pour l'instant, jusqu'à ce que je découvre un correctif élégant ... –

+0

David - +1 pour vous aussi en reconnaissance du concept T4MVC, sinon une réponse définitive à cette question :). comme je l'ai théorisé dans l'autre réponse, je pourrais bien sûr rendre tous mes paramètres nullables. mais ce serait plier le code pour s'adapter à l'outil. dommage qu'il n'y ait pas de "3ème" façon !! –

3

Vous devez réaliser que <%= ... %> est traité sur le serveur tandis que $("#propertyid").val() est exécuté sur le client lorsque la fonction cancelHoldBooking est appelée.

Une façon de résoudre votre problème est le suivant:

function cancelHoldBooking() { 
    var url = '<%= Url.Action(MVC.FundProperty.CancelLock(999)) %>'; // Provide a magic number 
    url += url.replace('999', $("#propertyid").val()); // Replace the magic number 
    // other code omitted for brevity - in this case i could 
    // of course have used the params {id: $('#propertyid').val()} object 
} 
+0

sheikhomar - oui, c'est ce que j'avais fait avant mon adoption de T4MVC ... ça marche bien mais je cherche une solution pour intégrer mon code T4 avec mes parametres javascript du coté client. merci .. –

+0

jim - J'ai légèrement changé ma réponse. J'espère que cela aide :-) – sheikhomar

+0

sheikhomar - oui, c'est définitivement une façon de faire. l'autre façon serait d'avoir la propriété id comme int? id - c'est-à-dire nullable. mais ni "sentir" juste. Cependant, +1 pour prendre le temps de travailler autour de cela. Je peux finir par coller avec la deuxième implémentation 'out the box' car l'appel a en fait dans ce cas 3 paramètres et pas seulement celui illustré ci-dessus. ;) –