77

Could anyone please tell how to pass dynamic values using Url.action().

Something Like,

var firstname="abc";
var username = "abcd";
location.href = '@Html.Raw(@Url.Action("Display", "Customer", new { uname = firstname ,name = username}))';

firstname, username is not getting reffered inside the Url.action() method.

How to pass these dynamic values using Url.action()?

Felipe Oriani
  • 37,948
  • 19
  • 131
  • 194
Kokila
  • 997
  • 3
  • 8
  • 14

4 Answers4

166

The @Url.Action() method is proccess on the server-side, so you cannot pass a client-side value to this function as a parameter. 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:

let firstName = "John";
let userName = "Smith";
location.href = '@Url.Action("Display", "Customer")?uname=' + firstName + '&name=' + userName ;

The @Url.Action("Display", "Customer") is processed on the server-side and the rest of the string is processed on the client-side, concatenating the result of the server-side method with the client-side.

Felipe Oriani
  • 37,948
  • 19
  • 131
  • 194
11

This answer might not be 100% relevant to the question. But it does address the problem. I found this simple way of achieving this requirement. Code goes below:

<a href="@Url.Action("Display", "Customer")?custId={{cust.Id}}"></a>

In the above example {{cust.Id}} is an AngularJS variable. However one can replace it with a JavaScript variable.

I haven't tried passing multiple variables using this method but I'm hopeful that also can be appended to the Url if required.

Dash
  • 804
  • 1
  • 9
  • 16
1

In my case it worked great just by doing the following:

The Controller:

[HttpPost]
public ActionResult DoSomething(int custNum)
{
    // Some magic code here...
}

Create the form with no action:

<form id="frmSomething" method="post">
    <div>
        <!-- Some magic html here... -->
    </div>
    <button id="btnSubmit" type="submit">Submit</button>
</form>

Set button click event to trigger submit after adding the action to the form:

var frmSomething= $("#frmSomething");
var btnSubmit= $("#btnSubmit");
var custNum = 100;

btnSubmit.click(function()
{
    frmSomething.attr("action", "/Home/DoSomething?custNum=" + custNum);

    btnSubmit.submit();
});

Hope this helps vatos!

EVIL
  • 71
  • 1
  • 4
  • 2
    Maybe it would be more future-proof if you could replace the string `/Home/DoSomething` with `@Url.Action("DoSomething", "TheController")`. That way if you rename your controller and/or action, your related url would still stay valid. – Mladen B. Jun 01 '21 at 16:25
1

The easiest way is:

  onClick= 'location.href="/controller/action/"+paramterValue'
Umar Farooq Awan
  • 161
  • 1
  • 3
  • 6