如果我使用以下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局部视图中效果很好)。
这里发生了什么?
答案 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让我感到沮丧,因为文档很少,而且这些问题需要花费几分钟才能解决,这些问题占用了我太多的时间。