Why Won't My Razor Code Compile!?!
I've said it before: The Razor code that I enter into my ASP.NET MVC Views looks like magic to me. The ability Razor gives me to mix HTML and code surpasses my understanding. But, like magic, because I don't understand why Razor works, there are times where I don't understand why Razor doesn't work.
And neither do my clients, one of whom called me up last week to ask why code like the following wasn't acceptable to Razor (in C#, equivalent code wouldn't require the second @ ... but it still wouldn't compile):
@If RowRequired Then
@<tr>
End If
The problem is that, inside a code block (like this If…Then block), Razor requires that all open tags have a matching close tag. Razor is fine with this code, for example:
@If RowRequired Then
@<tr></tr>
End If
This can make structuring your HTML a little more awkward but, there is a solution: use @: instead of plain old @. With @:, this code compiles:
@If RowRequired Then
@:<tr>
End If
</tr>
That's sharp!
Posted by Peter Vogel on 10/23/2015