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

时间:2014-06-26 20:21:21

标签: asp.net-mvc razor asp.net-mvc-5

我正试图在MVC5中使用Razor进行局部视图渲染。当我使用

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

我收到解析器错误:

  

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

当我删除{}时,即:

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

我收到编译错误

  

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

我做错了什么?

6 个答案:

答案 0 :(得分:29)

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

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

会给你错误,同时:

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

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

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

答案 1 :(得分:20)

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

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

答案 2 :(得分:9)

这是错误的:

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

这是正确的:

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

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

  

意外&#34; {&#34;在&#34; @&#34;字符。一旦进入代码体内   阻止(@ if {},@ {}等)你不需要使用&#34; @ {&#34;切换到   代码。

答案 3 :(得分:3)

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

Html.RenderPartial("ViewName", model);

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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