2013-04-17 1 views
13

Я написал следующее JQuery в моем частичный вид:Как передать динамическое значение в @ 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")' 
       } 
      } 
    }); 

Имя Действие и имя контроллера не являются фиксированными, они обязаны изменяться в зависимости от точки зрения, в котором этот частичный вид помещается. У меня есть функции для получения вызова имен действий и контроллеров, но не знаю, как я могу передать их в @ Url.Action.

Ниже приведены Javascript функции для извлечения действий и контроллер имен:

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

ваши в настоящее время проходящие две строки в 'Url.Action'. Они могут быть переменными. –

+0

"не фиксированы, они обязаны меняться" - откуда взялись значения? –

+0

Как @ Url.Action является помощником MVC, Создание переменной мне не поможет .. – Nirman

ответ

24

У меня есть функции для извлечения вызова имен действий и контроллер, но не знаю, как я могу передать их в @ Url.Action

Ну, вы могли бы назвать эти функции. Например, если они являются методы расширения для класса UrlHelper:

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

или, если они только статические функции:

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

Если с другой стороны, значения, которые должны быть переданы, как известно, только на клиент вы можете сделать следующее:

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:

кажется, что вы просто пытаетесь извлечь текущий контроллер и действие, которое может быть достигнуто так:

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

, а затем:

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

Я забыл упомянуть, что они являются функциями javascript. См. Редактирование, чтобы увидеть эти функции. – Nirman

+0

благодарит Дарина за подробный ответ, однако, я не уверен, что вы имели в виду под «SomeAction» и «SomeController». Должно ли это быть именем целевого действия? или он должен быть динамичным? – Nirman

+1

Кажется, вы пытаетесь извлечь текущее действие и контроллер. См. Мой обновленный пример и не используйте для этого javascript. –

2

вы пробовали что-то вроде этого? Я сам не пробовал, но он должен работать.

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

, замените:

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