YetaWF has a fair number of templates which are used with the UIHint attribute - And a lot of code generating the required HTML for the templates. In MVC5, the TagBuilder class was used to build HTML tags. Once all tag attributes are set, the ToString() method was used to generate the tag HTML string. Unfortunately, the TagBuilder.ToString() method in ASP.NET Core MVC is not implemented, so the object.ToString() method is used instead. This of course does not generate anything resembling an HTML string. Instead, you get something like "Microsoft.AspNetCore.Mvc.Rendering".
Old Code:
TagBuilder tag = new TagBuilder("span");
string html = tag.ToString();
Sadly, when converting to MVC6 there is no compile error or any other indication that things went wrong.
Creating an extension method for the TagBuilder class with a new ToString() method doesn't work as that doesn't override the existing object.ToString() method.
Your only option is to manually find all uses of TagBuilder.ToString() and change them to ToString(TagBuilder.Normal). Good luck, hope you don't miss one...
TagBuilder tag = new TagBuilder("span");
string html = tag.ToString(TagBuilder.Normal);
The recommendation given is to use HtmlString instead. But the whole point of upgrading an existing application is to do so with minimal code changes, and certainly without quietly breaking code!
It would have been simple enough to keep TagBuilder.ToString() without any adverse effects. It's disappointing that this new version of ASP.NET Core MVC does not seem to care about compatibility.