I have written following jquery in my partial view:
$.ajax({ type: "POST", url: '@Url.Action("PostActionName", "ControllerName")', data: { Id: "01" }, success: function(data) { if (data.success="true") { window.location = '@Url.Action("GetActionName", "ControllerName")' } } });
The Action name and Controller name are not fixed, they are bound to change depending upon the view wherein this partial view is placed. I have functions to fetch invoking action and controller names, but not sure how I can pass them in @Url.Action.
Following are Javascript functions to fetch action and controller names:
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; }
You can concat the client-side variables with the server-side url generated by this method, which is a string on the output. Try something like this: var firstname = "abc"; var username = "abcd"; location. href = '@Url.
I have functions to fetch invoking action and controller names, but not sure how I can pass them in @Url.Action
Well, you could call those functions. For example if they are extension methods to the UrlHelper class:
window.location = '@Url.Action(Url.MyFunction1(), Url.MyFunction2())'
or if they are just static functions:
window.location = '@Url.Action(SomeClass.MyFunction1(), SomeClass.MyFunction2())'
If on the other hand the values that need to be passed are known only on the client you could do the following:
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:
It seems that you are just trying to fetch the current controller and action which could be achieved like that:
@{ string currentAction = Html.ViewContext.RouteData.GetRequiredString("action"); string currentController = Html.ViewContext.RouteData.GetRequiredString("controller"); }
and then:
window.location.href = '@Url.Action(currentAction, currentController)';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With