Rendering partial views with Razor in MVC5

2019-04-03 06:33发布

I'm trying to get a partial view to render using Razor in MVC5. When I use

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

I get the parser error:

Unexpected "{" after "@" character. Once inside the body of a code block (@if {}, @{}, etc.) you do not need to use "@{" to switch to code.

When I remove the {}, i.e.:

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

I get the compilation error

Cannot implicitly convert type 'void' to 'object'.

What am I doing wrong?

6条回答
别忘想泡老子
2楼-- · 2019-04-03 07:16

This is wrong:

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

This is correct:

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

The parsing error might be caused by the partial view's content. For example, if you have an email address, make sure you use @@ to properly escape the @ sign.

Unexpected "{" after "@" character. Once inside the body of a code block (@if {}, @{}, etc.) you do not need to use "@{" to switch to code.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-04-03 07:18

You haven't posted the context of that code, but that error only really happens when you're using @ directly within a code block without any HTML wrappings. For example:

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

Would give you the error, while:

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

Would be fine. You could also solve it by just removing the code block for Html.RenderPartial entirely, including the @:

@if (true) {
    Html.RenderPartial(...);
}
查看更多
一夜七次
4楼-- · 2019-04-03 07:27

You may also use @Html.Partial("~/View/Home/myview.cshtml")

It returns string while Html.RenderPartial calls Write internally, and returns void.

查看更多
Juvenile、少年°
5楼-- · 2019-04-03 07:29

Please review your code, you might be getting that error because you are using this code: @{ Html.RenderPartial("ViewName", model); } inside any other @{} clause. Please, read again carefully the error message you get in the browser, you don't need to use the @{} to switch to code because you already are inside, so, just remove @{ and } and you should getting it working properly.

查看更多
甜甜的少女心
6楼-- · 2019-04-03 07:29

Use @Html.Partial(). It has three overloads, pass the parameters as per your requirement.

查看更多
再贱就再见
7楼-- · 2019-04-03 07:33

can you show the code surrounding your RenderPartial? I'm guessing you're in a loop, if block, or some other type of code block. If so, you would just call

Html.RenderPartial("ViewName", model);
查看更多
登录 后发表回答