Link to home
Start Free TrialLog in
Avatar of dyarosh
dyarosh

asked on

How to use Url.action with parameters in MVC View

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?
Avatar of Lokesh B R
Lokesh B R
Flag of India image

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

Avatar of dyarosh
dyarosh

ASKER

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

Avatar of dyarosh

ASKER

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())',
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

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
Avatar of dyarosh

ASKER

getURL is the action and RequestProcess is the controller
ASKER CERTIFIED SOLUTION
Avatar of Lokesh B R
Lokesh B R
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of dyarosh

ASKER

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