【问题标题】:Razor Partial View not RenderingRazor 局部视图未渲染
【发布时间】:2011-05-04 05:50:55
【问题描述】:

如果我使用以下 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 局部视图配合得很好)。

这是怎么回事?

【问题讨论】:

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


    【解决方案1】:

    尝试改变这个:

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

    到这里:

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

    看起来没有 @ 方法正在被调用,但返回值只是被 dscarded。放置 @ 会导致它被写入响应中。

    【讨论】:

    • @Danny - 您建议的更改未呈现内容。
    • 哦,我想我也可能已经从 "@{ Html.Action("Menu", "Nav"); }" 中删除了您的大括号,或者将其更改为 RenderAction 而不是 Action。也许这是两种变化的结合。如果没有,我回家后再试。
    • 是的,我必须做这两件事 - 删除大括号“@Html.Action(blah)”并在“@Html.RouteLink”前面添加@。第一个更改停止代码,因此 Action 的返回值得到输出(RenderAction 也可以工作,但它直接写入响应)。
    • Np,很高兴你把它整理好了 :-)
    【解决方案2】:

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

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

    编写Html.Action(...)(不带@)正常调用该方法,但不对其返回值做任何事情。

    【讨论】:

    • 谢谢你,一个很好的解释。毫无疑问,我会再次参考这个以供将来参考。
    【解决方案3】:

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

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

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

    【讨论】:

    • 我正在使用MVC3,刚刚遇到这个,我认为是一个错误。 @{ Html.RenderPartial(...); _Layout 页面中的 } 什么也不做。如果我改用@Html.Partial(....)(即返回一个字符串并将其输出,而不是使用直接写入响应流的RenderPartial 方法),我会看到我的Render Partial 的结果。如果我将 RenderPartial 代码移动到控制器的视图(即,不是 _Layout 页面),那么它会按预期工作。所以我认为这是一个错误,你不能在 _Layout 页面中使用 RenderPartial()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多