We help IT Professionals succeed at work.

How to use Url.action with parameters in MVC View

dyarosh
dyarosh asked
on
I have a view that has the following script in it:

  <script type='text/javascript'>

      function getURL(controllerName, actionName, routeVals) {
          var result = 0;
          $.ajax({
              data: { actionName: actionName, controllerName: controllerName, routeVals: routeVals },
              async: false,
              type: 'GET',
              url: '@Url.Action("getURL","RequestProcess")',
              success: function (data) {
                  result = data;
              }
          });
          return result;
      }
</script>

Open in new window


Currently the Url.action hard codes the action and controller.  I want to replace the action with the actionName passed into the function and the controller with the controllerName passed into the function.

When I replace "getURL" with actionName and "RequestProcess" with controllerName I receive the following error:

Server Error in '/Apps/Referrals' Application.

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'actionName' does not exist in the current context

Source Error:


Line 179:              async: false,
Line 180:              type: 'GET',
Line 181:              url: '@Url.Action(actionName,controllerName)',
Line 182:              success: function (data) {
Line 183:                  //callback

Source File: d:\websites\i21\Apps\Referrals\Views\Home\Index.cshtml    Line: 181 

Open in new window


What do I need to do to pass the actionName and controllerName to the @Url.action call?
Comment
Watch Question

Lokesh B RDeveloper
Top Expert 2015

Commented:
Hi,

<script type='text/javascript'>

      function getURL(controllerName, actionName, routeVals) {
          var result = 0;

$.ajax({
    url: '@Url.Action(actionName, controllerName)',
    data: { routeVals: routeVals },
              async: false,
              type: 'GET',
              success: function (data) {
                  result = data;
    }
});

</script>

Open in new window

Author

Commented:
As I noted in my post, I have tried that already but it generates an error when I try and generate the page.  Here is the screen shot showing the VS red line under the variables indicating it doesn't like something.
UrlActionError.fw.png
Lokesh B RDeveloper
Top Expert 2015

Commented:
Hi,

try this

<script type='text/javascript'>

    function getURL(controllerName, actionName, routeVals) {
        var result = 0;
        var Url = actionName + "/" + controllerName;
        $.ajax({
            url: '@Url.Action(Url.ToString())',
            data: { routeVals: routeVals },
            async: false,
            type: 'GET',
            success: function (data) {
                result = data;
            }
        });
    }

</script>

Open in new window

Author

Commented:
I got a Server Error.

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Home/0

Open in new window


I tried just replacing the hard coded portion as follows:

var URL = "getURL" + "/" + "RequestProcess";

and then in the ajax call:

url: '@Url.Action(Url.ToString())',
Lokesh B RDeveloper
Top Expert 2015

Commented:
Hi,

What is your ActionName & ControllerName?

In below code "Home" is Controller & "Index" is Action


<script type='text/javascript'>

   
function getURL(controllerName, actionName, routeVals) {
        var result = 0;
        $.ajax({
            url: '@Url.Action("Index","Home")',
            data: { routeVals: routeVals },
            async: false,
            type: 'GET',
            success: function (data) {
                result = data;
            }
        });
    }

</script>

Open in new window

Top Expert 2014

Commented:
Someone found how to get the routes known from javascript : http://jarrettmeyer.com/blog/2012/06/26/getting-asp-dot-net-mvc-routes-into-javascript

Author

Commented:
getURL is the action and RequestProcess is the controller
Developer
Top Expert 2015
Commented:
try this

function getURL(controllerName, actionName, routeVals) {
        var result = 0;
        $.ajax({
           url: '@Url.Action("getURL","RequestProcess")',
            data: { routeVals: routeVals },
            async: false,
            type: 'GET',
            success: function (data) {
                result = data;
            }
        });
    }

Author

Commented:
Thank you.  I was changing the data within the Ajax call when I wanted to set it outside the Ajax call.