176

I have a lot of experience with ASP.NET MVC 1-5. Now I learn ASP.NET Core MVC and have to pass a parameter to link in page. For example I have the following Action

 [HttpGet]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }

How can I implement the link for this action using tag helpers?

<a asp-controller="Product" asp-action="GetProduct">ProductName</a>

4 Answers 4

325

You can use the attribute prefix asp-route- to prefix your route variable names.

Example:

<a asp-controller="Product" asp-action="GetProduct" asp-route-id="10"> ProductName</a>
Sign up to request clarification or add additional context in comments.

7 Comments

If I have multiple parameter, I must add everything with this method?
@elvin-mammadov, yup, using asp-route-yourParamName, for example: asp-route-foo="bar"
@Alex Your example will generate the html as: <a href="/Product/GetProduct/10">ProductName</a>. Question: While using anchor tag helper how can we get the parameter value (e.g. 10) using jquery? `
@nam You can add a data attribute next to the ASP helper. <a asp-route-id="@item.Id" data-id="@item.Id" /> and then get the id with $('a').attr('data-id') :)
what if i want to add 5 Query parameters programmatically??
|
43

You might want to apply the following syntax.

<a asp-controller="Member"
   asp-action="Edit"
   asp-route-level="3"
   asp-route-type="full"
   asp-route-id="12">Click me</a>

That will produce the call route like this.

/Member/Edit/3/full/12

Then you can receive it in the method as shown below.

[Route({level}/{type}/{id})]
public IActionResult Edit(int level, string type, int id) { ... }

Although, the attribute decorating the method isn't required in MVC, it shows more clearly how to bind the attributes from the link to the passed in parameters in the method.

2 Comments

For me instead of /Member/Edit/3/full/12 it generates /Member/Edit/3?type=full&id=12
@Arif Can't say for sure why and I'm not in a C# environment at the moment (too lazy to start up one too). However, I'd suggest that it depends on whether we're explicitly stating [FromUrl] or [FromQuery] etc., which might differ between different versions of the .NET palatform and/or depend on inheriting classes for pure WebAPI calls (as opposed to the classes for BaseController with views and all that). Just a guestimation, NB.
9

if you want to put variable id into link in grid or table something below code can be used

[HttpGet]
[Route("/Product/GetProduct/{id}")]
 public ActionResult GetProduct(string id)
 {
      ViewBag.CaseId = id;
      return View();
 }


 <a  asp-controller="Product" asp-action="GetProduct" asp-route-id="@item.id" >ProductName</a>

Comments

0

On the back-end:

This code must write at the top of the action in the controller

[Route("/Controller/Method/{Object or varible name}")]
public actionresult method name(your variable)
{
    //your code...
}

On the front-end:

@{
var url = "/Controller/Method/" + your data;
<a href="@url"> click me for send data()</a>
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.