在MVC5中使用Razor渲染部分视图

问题描述 投票:21回答:6

我试图在MVC5中使用Razor进行局部视图渲染。我用的时候

@{ Html.RenderPartial("ViewName", model); }

我得到解析器错误:

“@”字符后出现意外的“{”。一旦进入代码块的主体(@if {},@ {}等),您就不需要使用“@ {”来切换到代码。

当我删除{},即:

@Html.RenderPartial("ViewName", model);

我收到编译错误

无法将类型'void'隐式转换为'object'。

我究竟做错了什么?

asp.net-mvc razor asp.net-mvc-5
6个回答
29
投票

您还没有发布该代码的上下文,但只有当您在代码块中直接使用@而没有任何HTML包装时才会发生该错误。例如:

@if (true) {
    @{ Html.RenderPartial(...); }
}

会给你错误,而:

@if (true) {
    <div>
        @{ Html.RenderPartial(...); }
    </div>
}

没关系。你也可以通过完全删除Html.RenderPartial的代码块来解决它,包括@

@if (true) {
    Html.RenderPartial(...);
}

20
投票

你也可以使用@Html.Partial("~/View/Home/myview.cshtml")

它返回字符串,而Html.RenderPartial在内部调用Write,并返回void。


9
投票

这是错的:

@Html.RenderPartial("ViewName", model);

这是对的:

@{ Html.RenderPartial("ViewName", model);  }

解析错误可能是由部分视图的内容引起的。例如,如果您有电子邮件地址,请确保使用@@正确转义@符号。

“@”字符后出现意外的“{”。一旦进入代码块的主体(@if {},@ {}等),您就不需要使用“@ {”来切换到代码。


3
投票

你能展示RenderPartial周围的代码吗?我猜你是在一个循环中,如果是块,或者其他类型的代码块。如果是这样,你只需要打电话

Html.RenderPartial("ViewName", model);

0
投票

请检查您的代码,您可能会收到该错误,因为您正在使用此代码:@{ Html.RenderPartial("ViewName", model); }在任何其他@{}子句中。请仔细阅读您在浏览器中收到的错误消息,您不需要使用@{}切换到代码,因为您已经在里面,所以,只需删除@{},您应该让它正常工作。


0
投票

使用@Html.Partial()。它有三个重载,根据您的要求传递参数。

© www.soinside.com 2019 - 2024. All rights reserved.