2013-04-17 7 views
13

Ich habe folgende Jquery in meiner Teilansicht geschrieben:Wie übergibt man den dynamischen Wert 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")' 
       } 
      } 
    }); 

Der Aktionsname und Name des Controllers sind nicht festgelegt, sie gebunden sind, in Abhängigkeit von der Ansicht zu ändern, wobei diese Teilansicht platziert wird. Ich habe Funktionen, um aufrufende Aktion und Controller-Namen abzurufen, aber nicht sicher, wie ich sie in @ Url.Action übergeben kann.

Im Folgenden sind Javascript-Funktionen Aktion und Controller-Namen zu holen:

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

Derzeit vorbei zwei Strings 'Url.Action'. Sie könnten durchaus Variablen sein. –

+0

"sind nicht festgelegt, sie müssen sich ändern" - woher kommen die Werte? –

+0

Da @ Url.Action ist ein MVC Helfer, Erstellen einer Variablen wird mir nicht helfen .. – Nirman

Antwort

24

I Funktionen holen Namen Aktion und Controller aufrufen, aber nicht sicher, wie ich sie in @ Url.Action

passieren kann

Nun, Sie könnten diese Funktionen aufrufen. Zum Beispiel, wenn sie Erweiterungsmethoden der UrlHelper Klasse:

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

oder wenn sie nur statische Funktionen:

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

Wenn auf der anderen Seite die Werte, die nur weitergegeben werden müssen, um auf bekannt sind der Kunde könnte man folgendes tun:

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:

Es scheint, dass Sie nur versuchen, den aktuellen Controller und die Aktion zu holen, die wie das erreicht werden könnte:

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

und dann:

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

Ich habe vergessen zu erwähnen, sie sind Javascript-Funktionen .. siehe die Bearbeitung, um diese Funktionen zu sehen. – Nirman

+0

danke Danke für die ausführliche Antwort, aber ich bin mir nicht sicher, was du mit "SomeAction" und "SomeController" meintest. Sollte dies ein Name der Zielaktion sein? oder sollte es dynamisch sein? – Nirman

+1

Sie scheinen zu versuchen, die aktuelle Aktion und den Controller abzurufen. Sehen Sie mein aktualisiertes Beispiel und verwenden Sie Javascript dafür nicht. –

2

Sie so etwas wie dies versucht haben? Ich habe es selbst nicht versucht, aber es sollte funktionieren.

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);} 

vor, ersetzen:

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