我需要一些关于在_layout.cshtml文件中插入菜单的指导。我遇到了两个问题: 1)即使我创建了一个包含两个数据模型的附加模型,我也无法将这两个模型传递给布局文件 例如:
型号:
public class IndexModel
{
public tblMenu tblMenu { get; set; }
public tblSite tblSite { get; set; }
}
我需要菜单表和同一页面上的网站表信息。
2)当我创建一个部分视图来传递菜单数据时,我不断得到异常,告诉我我不能以这种方式使用模型。
我的部分观点:
@model mvcSPS.Models.IndexModel
<li>@Model.tblMenu.MenuName</li>
我的控制器:
public ActionResult _menu()
{
return PartialView(db.IndexModels.ToList());
}
我的_layout.cshtml
<ul id="navigation">
@foreach (var item in Model)
{
@Html.Partial("_menu")
}
</ul>
我已经在网上搜索并且非常坦率。我从ASP经典(是的,我知道)到ASP.net和MVC的过渡非常困难。
非常感谢您的温和指导。 感谢
安德鲁
答案 0 :(得分:1)
更改_layout.cshtml中的@ Html.Partial以调用控制器函数并呈现Action方法的结果。
@foreach (var item in Model)
{
Html.RenderAction("_menu", "Home");
}
注意:你不需要预先添加'@',因为它位于foreach循环的上下文中
编辑:根据我的评论建议
HomeController中:
public ActionResult Menu() {
return PartialView("_menu", db.IndexModels.ToList());
}
_layout.cshtml
@{Html.RenderAction("Menu", "Home");} //be sure to fully-qualify the controller since it's layout, otherwise it'll look to the current controller based on route values collection
_menu.cstml
<nav>
<ul>
@foreach(var item in Model) {
Html.Partial("_menuItem", item)
}
</ul>
</nav>
_menuItem.cshtml
@foreach(var item in Model) {
<li>
<a href="http://url">text</a>
@if(item.Children.Any())
{
<ul>
Html.Partial("_menuItem", item.Children)
</ul>
}
</li>
}