2013-04-17 23 views
13

Pisałem następujące jQuery w moim częściowym widokiem:Jak przekazać wartość dynamiczną w @ 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")' 
       } 
      } 
    }); 

Nazwa działania i nazwa kontrolera nie są stałe, są one zobowiązane do zmiany w zależności od widoku, w którym ten częściowy widok jest umieszczony. Mam funkcje pobierania nazw akcji i kontrolerów, ale nie wiem, w jaki sposób mogę je przekazać w @ Url.Action.

Poniżej przedstawiono funkcje Javascript, aby pobrać i działania regulatora nazwy:

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

Wasze obecnie przechodzących dwie struny na 'Url.Action'. Mogą to być zmienne. –

+0

"nie są ustalone, są zobowiązane do zmiany" - skąd pochodzą wartości? –

+0

As @ Url.Action jest pomocnikiem MVC, Tworzenie zmiennej mi nie pomoże .. – Nirman

Odpowiedz

24

Mam funkcji do pobierania powołując nazwy kontrolera i akcji, ale nie pewien sposób mogę przekazać je w @ Url.Action

Cóż, możesz wywołać te funkcje. Na przykład, jeśli są metody rozszerzenie do klasy UrlHelper:

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

lub jeśli są funkcje tylko statycznych:

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

Jeśli natomiast wartości, które muszą być przekazywane są znane tylko na klient mógł wykonać następujące czynności:

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:

Wydaje się, że jesteś po prostu staramy się pobrać aktualny sterownik i działań, które mogłyby zostać osiągnięty tak:

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

a następnie:

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

Zapomniałem wspomnieć, że są to funkcje javascript .. zobacz edycję, żeby zobaczyć te funkcje. – Nirman

+0

dziękuję Darin za szczegółową odpowiedź, jednak nie jestem pewien, co rozumiesz przez "SomeAction" i "SomeController". Czy powinna to być nazwa docelowej akcji? czy powinien być dynamiczny? – Nirman

+1

Wygląda na to, że próbujesz pobrać bieżącą akcję i kontroler. Zobacz mój zaktualizowany przykład i nie używaj javascript dla tego. –

2

Próbowałeś coś takiego? Sam tego nie próbowałem, ale powinno działać.

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

przed wymienić:

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