Html.RenderPartial() syntax with Razor
This works, because it returns the result of partial view rendering in a string:
@Html.Partial("Path/to/my/partial/view")
But I prefer to use RenderPartial
and it seems I need to write:
@{Html.RenderPartial("Path/to/my/partial/view");}
instead of:
@Html.RenderPartial("Path/to/my/partial/view");
To get it to work. Error message:
Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
If there any better way instead of opening code block @{...}
just for one method call?
Solution 1:
RenderPartial()
is a void method that writes to the response stream. A void method, in C#, needs a;
and hence must be enclosed by{ }
.Partial()
is a method that returns an MvcHtmlString. In Razor, You can call a property or a method that returns such a string with just a@
prefix to distinguish it from plain HTML you have on the page.
Solution 2:
Html.RenderPartial() is a void method - you can check whether a method is a void method by placing your mouse over the call to RenderPartial in your code and you will see the text (extension) void HtmlHelper.RenderPartial...
Void methods require a semicolon at the end of the calling code.
In the Webforms view engine you would have encased your Html.RenderPartial() call within the bee stings <% %>
like so
<% Html.RenderPartial("Path/to/my/partial/view"); %>
when you are using the Razor view engine the equivalent is
@{Html.RenderPartial("Path/to/my/partial/view");}