剃刀局部视图不渲染

Did*_*xis 3 partial-views razor asp.net-mvc-3

如果我使用以下Controller方法:

public ActionResult Menu()
{
    // do stuff...

    return PartialView("viewName", navLinks);
}
Run Code Online (Sandbox Code Playgroud)

在_Layout.cshtml中调用局部视图,如下所示:

<div id="categories">
    @{ Html.Action("Menu", "Nav"); }
</div>
Run Code Online (Sandbox Code Playgroud)

使用以下ASCX局部视图:

<%@ Control Language="C#"
    Inherits="ViewUserController<IEnumerable<MyDataType>>" %>

<% foreach(var link in Model) { %>
    <%: Html.Route.Link(link.Text, link.RouteValues) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

一切正常.好极了.


但是,如果我使用以下任一RAZOR部分视图:

@model IEnumerable<MyDataType>

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

要么...

@model IEnumerable<MyDataType>

@{
    Layout = null;
}

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

我一无所获.抛出没有异常,我只是没有得到任何渲染.我知道问题不在于控制器方法(它在ASCX局部视图中效果很好).

这里发生了什么?

Dan*_*eny 6

尝试改变这个:

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

对此:

@foreach(var link in Model){
    @Html.RouteLink(link.Text, link.RouteValues);
}
Run Code Online (Sandbox Code Playgroud)

看起来没有调用@方法,但返回值只是被忽略了.放置@会使其写入响应中.


SLa*_*aks 5

RenderAction方法将操作直接写入视图并返回void.
Action方法返回操作的内容,但不向视图写入任何内容.

写入@something将打印something页面的值.
你不能写@Html.RenderAction,因为RenderAction不会返回任何东西.

写入Html.Action(...)(不@)正常调用方法,但不对其返回值执行任何操作.