剃刀局部视图不渲染

时间:2011-05-04 05:50:55

标签: asp.net-mvc-3 razor partial-views

如果我使用以下Controller方法:

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

    return PartialView("viewName", navLinks);
}

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

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

使用以下ASCX局部视图:

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

<% foreach(var link in Model) { %>
    <%: Html.Route.Link(link.Text, link.RouteValues) %>
<% } %>
一切正常。耶。


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

@model IEnumerable<MyDataType>

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

...或

@model IEnumerable<MyDataType>

@{
    Layout = null;
}

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

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

这里发生了什么?

3 个答案:

答案 0 :(得分:6)

尝试更改此内容:

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

到此:

@foreach(var link in Model){
    @Html.RouteLink(link.Text, link.RouteValues);
}

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

答案 1 :(得分:5)

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

撰写@something会将something的值打印到页面 你不能写@Html.RenderAction,因为RenderAction不会返回任何内容。

编写Html.Action(...)(没有@)会正常调用该方法,但不会对其返回值执行任何操作。

答案 2 :(得分:1)

好的,改变从_Layout.cshtml调用它的方式......

<div id="categories">
    @Html.Action("Menu", "Nav");
</div>

重要的是要注意,@ Html.RenderAction对我不起作用。我真的很喜欢这里的一些解释,因为现在,学习Razor让我感到沮丧,因为文档很少,而且这些问题需要花费几分钟才能解决,这些问题占用了我太多的时间。