Skip to content

A Razor ‘@helper’ block for .NET Core

Joe Glombek asked me to elaborate on this toot:

W000T!!

TIL: The “holy-cow-I-used-that-a-lot” @​helper feature in Razor that was removed [at some point], does in fact still exist, albeit a whole lot more anonymously (which of course means that I would never find out about it on my own).

#Umbraco

What I was referring to was this Razor feature that I’ve been using a lot:

<section>
	@sayHello("Joe")
	@sayHello("Chriztian")
</section>

@helper sayHello(string name) {
	var greeting = name == "Joe" ? "Hello!" : "Hi there!";
	<article>
		<h2>@(name)</h2>
		<cite>Hello!</cite>
	</article>
}

The idea being that you could create what’s essentially a function, but instead of returning a value, it renders markup directly from within; i.e. no HtmlString-futzing necessary to build a return value.

But this was no longer possible in .NET Core, and I’ve been back to creating real functions, returning HTMLStrings, when I saw something very similar in a C# View Partial:

@{
	void QuoteMe(string message, string source) {
		<q cite="@(source)">@(message)</q>
	}
}

Apparently that’s been possible since .NET Core 3/4-ish?