Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 不渲染局部视图_Asp.net Mvc 3_Razor_Partial Views - Fatal编程技术网

Asp.net mvc 3 不渲染局部视图

Asp.net mvc 3 不渲染局部视图,asp.net-mvc-3,razor,partial-views,Asp.net Mvc 3,Razor,Partial Views,如果我使用以下控制器方法: public ActionResult Menu() { // do stuff... return PartialView("viewName", navLinks); } 在_Layout.cshtml中调用部分视图,如下所示: <div id="categories"> @{ Html.Action("Menu", "Nav"); } </div> @{Html.Action(“菜单”、“导航”);} 使

如果我使用以下控制器方法:

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

    return PartialView("viewName", navLinks);
}
在_Layout.cshtml中调用部分视图,如下所示:

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

@{Html.Action(“菜单”、“导航”);}
使用以下ASCX局部视图:

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

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

一切正常。耶


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

@model IEnumerable<MyDataType>

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}
@model IEnumerable
@foreach(模型中的var链接){
RouteLink(link.Text,link.RouteValues);
}
或者

@model IEnumerable
@{
布局=空;
}
@foreach(模型中的var链接){
RouteLink(link.Text,link.RouteValues);
}
我什么也得不到。没有抛出异常,我只是没有得到任何渲染。我知道问题不在于控制器方法(它只适用于ASCX局部视图)

这是怎么回事?

尝试更改此选项:

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

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

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

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

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

@动作(“菜单”、“导航”);

需要注意的是,@Html.RenderAction对我不起作用。我真的很想在这里得到一些解释,因为现在,学习Razor让我很沮丧,因为几乎没有文档,像这样需要几分钟才能解决的问题占用了我太多的时间。

RenderAction方法将动作直接写入视图并返回
void

Action
方法返回操作的内容,但不向视图写入任何内容

写入
@something
将把
something
的值打印到页面上。
无法编写
@Html.RenderAction
,因为
RenderAction
不返回任何内容


编写
Html.Action(…)
(不带
@
)通常会调用该方法,但不会对其返回值做任何操作。

@Danny-您建议的更改没有呈现内容。哦,我想我也可能已将您的大括号从“@{Html.Action(“菜单”,“导航”);}”中删除,或者将其更改为RenderAction而不是Action。也许这是两种变化的结合。如果没有,我会在回家后再试一次。是的,我必须做两件事——删除括号“@Html.Action(blah)”,并在“@Html.RouteLink”前面添加@。第一个更改是停止代码,以便操作的返回值得到输出(RenderAction也可以工作,但它会直接写入响应)。Np,很高兴您对其进行了排序:-)谢谢,这是一个非常好的解释。毫无疑问,我将再次参考这篇文章,以备将来参考。我正在使用MVC3,刚刚遇到了这个问题,我认为这是一个bug@_布局页面中的{Html.RenderPartial(…);}不起任何作用。如果我改为使用@Html.Partial(..),我会看到Render Partial的结果(即,返回一个字符串并将其输出,而不是使用直接写入响应流的RenderPartial方法)。如果我将RenderPartial代码移动到控制器的视图(即,不是_布局页面),那么它将按预期工作。因此,我认为这是一个无法在布局页面中使用RenderPartial()的错误。
<div id="categories">
    @Html.Action("Menu", "Nav");
</div>