Form Tag Helper in ASP.NET Core

The Form Tag Helper generates the HTML <form> element based on the various attributes like asp-controller, asp-action etc. In this tutorial, We will look at how to use Form Tag Helper in ASP.NET Core forms.

Form Tag Helper

The Form Tag Helper targets the HTML <form> element and generates the action URL & action method attributes. It uses the various server-side attributes like asp-controller, asp-action, asp-route- etc to generate the <form> element in the view. It does the following.

  1. Generates URL for the action attribute and method attribute using the asp-controller, asp-action & asp-area.
  2. Generates the Route Parameters, Query strings & URL Fragments using the attributes like asp-route-{value}, asp-all-route-data & asp-fragment etc.
  3. Generates a hidden ValidateAntiForgeryToken to prevent cross-site request forgery.

Attributes of Form Tag Helper

The Form Tag Helpers provide several server-side attributes which help us to manipulate the generated URL. The following is the list of available attributes.

  1. asp-controller
  2. asp-action
  3. asp-route
  4. asp-all-route-data
  5. asp-route-{value}
  6. asp-area
  7. asp-fragment
  8. asp-page
  9. asp-page-handler
  10. asp-host
  11. asp-protocol
  12. asp-antiforgery

Adding Controller Action method in URL


The asp-controller attribute is the name of the MVC controller to use while generating the URL.


The above code translates into

Note that the current method is used as the action method.


The asp-action is the name of the MVC Controller action method to use while generating the URL.


The above code translates into

Adding Areas in Route


The asp-action attribute sets the area name to use while generating the URL


The above code translated into

For, Areas to work correctly, the route must have area specified as shown below.

You can read more about Areas from here.

Adding Route Parameters / Query String & Fragments

Most of the times, you need to add parameters to the controller action method. The additional parameters may be in the form of URL Parameter, Query string or URL Fragments. The asp-route-{value}, asp-all-route-data & asp-fragment are the attributes for this task.


The asp-route-{value} attribute sets the value for a single route parameter represented by the {Value}. It the {value} is not matched to any route parameter, then it is appended as the query string.

Consider the following route.

For example in the following route

To include id parameter in the URL we use asp-route-{value} attribute, where {value} is replaced by the id.


Would translate as

Multiple parameters.

Would translate as

What if the id parameter is not available in the route?

If no matching route parameter is found, then the asp-route-{value} included in the URL as the query string.

For Example: if our route is

Then this tag helper,

Translates into

Note that

The asp-route-{value} attribute needed to be specified for each URL Parameter and query string. 


The asp-all-route-data attribute sets either the URL Parameter or Query string or both using dictionary of key-value pairs.


To use this attribute you should first create a dictionary key-value pair as shown below. The key is the parameter name, and the value is the parameter value.

For the Route below

The following asp-all-route-data tag attribute

Translates into


The asp-fragment attribute sets the URL fragment that needs to be appended to the URL. The URL fragment is added at the end of the URL after the hash character (#).


is translated to

Using Named Route


The asp-route attribute sets the “named route” to use while generating the URL.

The routes can be given name while adding them to the routes collection. 

In the above route, “Default” is the name of the route. 


Translates into


Razor pages (do not confuse with Razor views) doesn’t support named routes. This parameter will only be used for MVC routes.

Do not use asp-controller or asp-action along with the the asp-route attribute. This most probably results in a route conflict.

Routing to Razor Pages


The asp-page attribute is used with Razor Pages. The Razor page name must be provided without the file extension

This translates into

If no page name is specified, the tag helper will generate a link to the current page.


The asp-page-handler attribute is used with Razor Pages. It’s intended for linking to specific page handlers.

Consider the following page handler:

The generated HTML:

The asp-page & asp-page-handler attributes are applicable only to Razor pages and must not be mixed with the asp-route, asp-controller, and asp-action attributes.

However, asp-route-{value} , asp-all-route-data , asp-fragment can be used with asp-page attribute 

Specifying the HTTP protocol & Host


The asp-protocol attribute sets the protocol to be used in the URL (such as https).

For Example :

The generated HTML:


The asp-host attribute sets the hostname in the generated URL

For Example:

The generated HTML:

Anti Forgery Tokens


The form Tag Helper automatically generates a hidden Antiforgery taken called as “Request Verification Token” to prevent the Cross-site request forgery (also known as XSRF) attack.



The above code translated into

If you wish to disable, then setting the asp-antiforgery to false.

Which gets translates into


In this tutorial, we looked at the <Form> Tag helper in ASP.NET Core.

1 thought on “Form Tag Helper in ASP.NET Core”

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top