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

24

我正在尝试使用Razor在MVC5中呈现部分视图。当我使用

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

我遇到了解析器错误:

在“@”字符后面出现意外的“{”。一旦进入代码块的正文中(@if {},@{}等),您无需使用“@ {”切换到代码。

当我删除{}时,即:

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

我遇到了编译错误

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

我做错了什么?

6个回答

35
你没有发布代码的上下文,但是只有在没有任何HTML包装的代码块内直接使用@时才会发生那个错误。例如:
@if (true) {
    @{ Html.RenderPartial(...); }
}

当执行以下操作时会出现错误:

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

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

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

1
很好,它被包含在一个@foreach{}中! - Mourndark
很好的回答,细节比我的好得多 :) - Anthony Shaw

26
您还可以使用@Html.Partial("~/View/Home/myview.cshtml")。与此不同,Html.RenderPartial在内部调用Write并返回void,而返回字符串。

在我看来,这是对问题的正确/最佳答案。 - Form

10

这是错误的:

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

这是正确的:

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

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

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


这可能是因为代码块(与@符号一起的)在其他代码块(例如foreach if等)之后,如果是这种情况,则不应在代码块前面放置@。 - Edo Post
在我的情况下,有一个索引视图,我创建了一个部分视图搜索表单,我想通过@{Html.RenderPartial("TestOne");} 在索引视图中包含它。如果我单独运行TestOne,它可以工作,但如果我运行索引,则会出现错误。传递给字典的模型项的类型是 'PagedList.PagedList`..... - SAR

4

你能展示一下包含RenderPartial的代码吗?我猜想你可能在循环、条件语句或其他类型的代码块中。如果是这样,你只需要调用

Html.RenderPartial("ViewName", model);

0

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接