When rendering output from a razor template it is important to remember the distinction between
@{ ...}
and @(...)
Curly braces will cause the output to execute, whilst the regular parenthesis will cause the output to render.
As an example that tripped me up during rendering of a ViewComponent in the CamperFinder demo, the following executes the output, but does not render it.
<div>
@foreach (var vehicle in Model.Vehicles) {
@await Component.InvokeAsync("VehicleSummary", vehicle);
}
</div>@
The inner await
block is executed within the scope of the loop, within {}
braces.
By adding parentheses around the await
following renders the content as we want it.
<div>
@foreach (var vehicle in Model.Vehicles) {
@(await Component.InvokeAsync("VehicleSummary", vehicle));
}
</div>
Leave a Reply