.NET Core fundamentals in one picture.

How to fix Microsoft.AspNetCore.Mvc.TagHelpers not being rendered!

This post was most recently updated on January 17th, 2020.

Reading Time: 3 minutes.

Ha – another one, that ended up being a simple fix, but since nobody actually explains it well, took me an hour to figure out.

This post ended up being another example of my “I’m going to document every single fix, that took me more than 10 minutes to figure out, since that’ll help me (and others) the next time the same issue arises.” blogging strategy. Snappy name, right? Never was my strongest suit!

Anyway, I ended up banging my head to the wall. Hopefully after documenting this, you wouldn’t have to.

What are TagHelpers then?

I’m quoting and paraphrasing Microsoft for a while here, as they explain it pretty thoroughly:

Tag Helpers enable server-side code to participate in creating and rendering HTML elements in Razor files. There are many built-in Tag Helpers for common tasks – such as creating forms, links, loading assets and more – and even more available in public GitHub repositories and as NuGet packages.

Tag Helpers are authored in C#, and they target HTML elements based on element name, attribute name, or parent tag. For example, the built-in LabelTagHelper can target the HTML element when the LabelTagHelper attributes are applied.

An example of LabelTagHelper would be this:
<label asp-for=”Movie.Title”></label>

This built-in helper would fetch the name / display name for a property called Title on the object of type Movie on a view.

If you’re familiar with HTML Helpers, Tag Helpers reduce the explicit transitions between HTML and C# in Razor views. In many cases, HTML Helpers provide an alternative approach to a specific Tag Helper, but it’s important to recognize that Tag Helpers don’t replace HTML Helpers and there’s not a Tag Helper for each HTML Helper.

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-2.2

In short, they reduce the need for you to code menial, boring stuff, that nobody wants to do. That’s good stuff.

How to start using “Microsoft.AspNet.Mvc.TagHelpers”?

The bottom line is this – you need to add this line to your _ViewImports.cshtml file. And you need to make SURE, that the particular _ViewImports file is used for your views!

@using Microsoft.AspNetCore.Identity
@using YourApp
@namespace YourNamespace
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

So what was wrong in my case?

I had downloaded an example from Microsoft, and built on top of that. The sample was great, but not meant to familiarize the user with how routing works in ASP.NET Core – it was just expected to work. But suddenly, for me it stopped working, when I added another controller with views!

So what exactly didn’t work?

Code like below wouldn’t route anything anywhere. The anchor elements were not links at all.

<!-- Other stuff here -->
<td>
   <a asp-action="Edit" asp-route-id="@item.SiteId">Edit</a> |
   <a asp-action="Details" asp-route-id="@item.SiteId">Details</a> |
   <a asp-action="Delete" asp-route-id="@item.SiteId">Delete</a>
</td>
<!-- Other stuff continues -->

Why did this work on some Views, but not on others?

And how to fix that?

The fix ended up being simple – just copypaste a suitable _ViewImports.cshtml under your /Views -folder.

The _ViewImports.cshtml file is required in the folder your Views are in, or its parents. The example I was working with only included _ViewImports -files under /Pages and its subfolders.

Another things, that’s super simple when you know it, but frustrating when you’re picking something new up!

Further Reading

mm

18
Leave a Reply

avatar
5000
7 Comment threads
11 Thread replies
8 Followers
 
Most reacted comment
Hottest comment thread
8 Comment authors
Paul ThompsonRyanSudhanshu ShekharAjeetRoman Recent comment authors
  Subscribe  
Notify of
Ryan
Guest
Ryan

I did everything your article said to do. I have Asp .net Core 3.1 vs 2019 I installed v2.2 from nuget of the Microsoft.AspNetCore.Mvc.TagHelpers by Microsoft.
I added the @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers in the /Views/_ViewImports.cshtml file along with the other things you mentioned in your article.
In the index.cshtml file I added a link like this…

Display

When I run this app in the Chrome browser and perform a “View Page Source” to display the html, I see the following link like this…

Display

It’s missing all the asp-controller asp-action and asp-route information.
Is there something I’m doing wrong?

Ryan
Guest
Ryan

It appears that I can’t submit the html in the post, basciall when I try to use the asp-controller asp-action and the asp-route-id in my source code inside a razor page the rendered html in the browser omits all three tag helpers in the link. Again it’s not displaying the controller, action and ID information has a link.

Ryan
Guest
Ryan

I figured it out! In the Startup.cs file there was a method called app.UseEndpoints… I commented out that method (Normally created when you create a new project) and everything started to work.

Paul Thompson
Guest
Paul Thompson

Thanks. Saved me a bunch of time.