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>