jquery asp.net-mvc-4 url.action

jquery - ¿Cómo pasar valor dinámico en @ Url.Action?



asp.net-mvc-4 (3)

He escrito siguiendo jquery en mi vista parcial:

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

El nombre de la Acción y el nombre del Controlador no son fijos, están obligados a cambiar según la vista en la que se coloque esta vista parcial. Tengo funciones para recuperar la acción de invocación y los nombres de los controladores, pero no estoy seguro de cómo puedo pasarlos en @ Url.Action.

A continuación se muestran las funciones de Javascript para recuperar los nombres de acción y controlador:

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


Tengo funciones para recuperar la acción de invocación y los nombres de los controladores, pero no estoy seguro de cómo puedo pasarlos en @ Url.Action

Bueno, podrías llamar a esas funciones. Por ejemplo, si son métodos de extensión a la clase UrlHelper:

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

o si son solo funciones estáticas:

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

Si, por otra parte, los valores que deben pasarse se conocen solo en el cliente, puede hacer lo siguiente:

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

ACTUALIZAR:

Parece que solo estás tratando de obtener el controlador actual y la acción que podría lograrse así:

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

y entonces:

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


¿Has intentado algo como ésto? No lo he intentado yo mismo, pero debería funcionar.

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;


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

antes, reemplace:

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