2013-04-17 19 views
13

mi hanno scritto dopo jquery a mio vista parziale:Come passare il valore dinamico in @ Url.Action?

$.ajax({ 
     type: "POST", 
     url: '@Url.Action("PostActionName", "ControllerName")', 
     data: { Id: "01" }, 
     success: function(data) 
      { 
      if (data.success="true") 
       { 
        window.location = '@Url.Action("GetActionName", "ControllerName")' 
       } 
      } 
    }); 

il nome dell'azione e il nome del controller non sono fissi, che sono destinate a cambiare a seconda della visualizzazione in cui è collocato questo punto di vista parziale. Ho delle funzioni per recuperare l'azione di richiamo e i nomi dei controller, ma non sono sicuro di come posso passarli in @ Url.Action.

seguito sono funzioni Javascript per recuperare azione e del controller nomi:

function ControllerName() { 
      var pathComponents = window.location.pathname.split('/'); 
      var controllerName; 
      if (pathComponents.length >= 2) { 
       if (pathComponents[0] != '') { 
        controllerName = pathComponents[0]; 
       } 
       else { 
        controllerName = pathComponents[1]; 
       } 
      } 
      return controllerName; 
     } 

     function ActionName() { 
      var pathComponents = window.location.pathname.split('/'); 
      var actionName; 
      if (pathComponents.length >= 2) { 
       if (pathComponents[0] != '') { 
        actionName = pathComponents[1]; 
       } 
       else { 
        actionName = pathComponents[2]; 
       } 
      } 
      return actionName;    
     } 
+0

Il tuo momento di passaggio due stringhe a 'Url.Action'. Potrebbero essere delle variabili. –

+0

"non sono corretti, sono destinati a cambiare" - da dove provengono i valori? –

+0

As @ Url.Action è un helper MVC, la creazione di una variabile non mi aiuta .. – Nirman

risposta

24

devo funzioni per recuperare invocando i nomi di azione e del controller, ma non sicuro di come io possa passare @ Url.Action

Bene, è possibile chiamare quelle funzioni. Ad esempio se si tratta di metodi di estensione alla classe UrlHelper:

window.location = '@Url.Action(Url.MyFunction1(), Url.MyFunction2())' 

o se sono funzioni solo statiche:

window.location = '@Url.Action(SomeClass.MyFunction1(), SomeClass.MyFunction2())' 

Se invece i valori che devono essere passato sono noti solo presso il cliente si potrebbe effettuare le seguenti operazioni:

var param = 'some dynamic value known on the client'; 
var url = '@Url.Action("SomeAction", "SomeController", new { someParam = "__param__" })'; 
window.location.href = url.replace('__param__', encodeURIComponent(param)); 

UPDATE:

Sembra che si sta solo cercando di prendere il controllo di corrente e l'azione che si potrebbe realizzare così:

@{ 
    string currentAction = Html.ViewContext.RouteData.GetRequiredString("action"); 
    string currentController = Html.ViewContext.RouteData.GetRequiredString("controller"); 
} 

e poi:

window.location.href = '@Url.Action(currentAction, currentController)'; 
+0

Ho dimenticato di menzionare che sono funzioni javascript. Per vedere queste funzioni vedere la modifica. – Nirman

+0

grazie Darin per la risposta dettagliata, tuttavia, non sono sicuro di cosa intendessi per "SomeAction" e "SomeController". Dovrebbe essere un nome di azione target? o dovrebbe essere dinamico? – Nirman

+1

Sembra che tu stia tentando di recuperare l'azione corrente e il controller. Vedi il mio esempio aggiornato e non usare javascript per questo. –

2

Hai provato qualcosa di simile? Non l'ho provato da solo, ma dovrebbe funzionare.

var dataToSend = "01"; 
var url = '/controllerName/actionName/' + dataToSend; 
var actionName = ActionName(); 
var controllerName = ControllerName(); 
url.replace("actionName",actionName); 
url.replace("controllerName",controllerName); 
window.location = url; 
0
function functionName(var1, var2) {var link = '@Url.Action("MethodName", "Controller", new { id = "-1", name = "-2" })'; 
    link = link.replace("-1", var1); 
    link = link.replace("-2", var2);} 

, sostituire:

html += "<a class='k-button k-button-icontext k-primary' href='" + link + "'><i class='fa fa-download'></i> Name Button</a>" 
Problemi correlati