web-dev-qa-db-fra.com

Comment passer une valeur dynamique dans @ Url.Action?

J'ai écrit le jquery suivant dans ma vue partielle:

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

Le nom de l'action et le nom du contrôleur ne sont pas fixes, ils sont tenus de changer en fonction de la vue dans laquelle cette vue partielle est placée. J'ai des fonctions pour récupérer les noms d'action et de contrôleur, mais je ne sais pas comment je peux les passer dans @ Url.Action.

Voici les fonctions Javascript pour récupérer les noms d'action et de contrôleur:

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;            
        }
17
Nirman

J'ai des fonctions pour récupérer les noms d'action et de contrôleur, mais je ne sais pas comment les transmettre dans @ Url.Action

Eh bien, vous pourriez appeler ces fonctions. Par exemple, s'il s'agit de méthodes d'extension à la classe UrlHelper:

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

ou si ce ne sont que des fonctions statiques:

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

Si, par contre, les valeurs à transmettre ne sont connues que du client, vous pouvez procéder comme suit:

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

MISE À JOUR:

Il semble que vous essayez simplement de récupérer le contrôleur actuel et l'action qui pourrait être réalisée comme ça:

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

puis:

window.location.href = '@Url.Action(currentAction, currentController)';
30
Darin Dimitrov

Avez-vous essayé quelque chose comme ça? Je ne l'ai pas essayé moi-même, mais ça devrait marcher.

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

avant, remplacer:

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