Подтвердить что ты не робот

Как передать динамическое значение в @Url.Action?

Я написал следующий jquery в моем частичном представлении:

    $.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;            
        }
4b9b3361

Ответ 1

У меня есть функции для извлечения имен действий и контроллеров, но не уверен, как я могу передать их в @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)';

Ответ 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;

Ответ 3

   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>"