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?
ASP.NET

Avatar of undefined
Last Comment
dyarosh

8/22/2022 - Mon
Lokesh B R

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

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
Lokesh B R

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

This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
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())',
Lokesh B R

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

louisfr

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
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
dyarosh

ASKER
getURL is the action and RequestProcess is the controller
ASKER CERTIFIED SOLUTION
Lokesh B R

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
dyarosh

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