如何在部分页面中动态传递菜单内容

时间:2017-03-08 06:22:50

标签: asp.net-mvc-4 asp.net-mvc-5

Layout.cshtml

 <table style="width:100%;" class="backcss">
        <tr>
            <td style="width: 20%;  " valign="top" class="corner">
                @Html.Partial("_Menu")                
            </td>
            <td valign="top" align="center">
                @RenderBody()
            </td>
        </tr>
    </table>

_Menu.cshtml(部分页面)

 @if (ViewData["MenuITem"] != null)
 {

    foreach (var item in ViewData["MenuITem"] as IEnumerable<Conference_Project.Areas.Master.Models.MenuItem>)
    {        
        <b> @item.controller</b>
       <b>@item.action</b>       
   }
}

MenuItem.cs(class)

public class MenuItem
 {
    public MenuItem(string area, string controller, string action, string name)
    {
        this.area = area;
        this.controller = controller;
        this.action = action;
        this.name = name;
    }
    public string area { get; set; }
    public string controller { get; set; }
    public string action { get; set; }
    public string name { get; set; }
}

控制器

public ActionResult _Menu()
    {
        List<MenuItem> obj = new List<MenuItem>();
        obj.Add(new MenuItem("Master", "User", "ViewProfile", "Profile"));
        obj.Add(new MenuItem("Master", "User", "StepI", "Abstract"));           
        ViewData["MenuITem"] = obj;
        return PartialView();
    } 

我想使用控制器传递LeftMenu内容,我试图在控制器中传递部分页面视图但不能正常工作

1)如何在部分页面中动态传递菜单内容?

2 个答案:

答案 0 :(得分:2)

@Html.Partial("_Menu")只需将部分html渲染到布局中。如果要调用生成菜单项的服务器方法,则需要使用@Html.Action()(或@{ Html.RenderAction(); }

<td style="width: 20%;  " valign="top" class="corner">
    @Html.Action("_Menu", "YourControllerName")                
</td>

但我建议您将模型传递到_Menu.cshtml视图,而不是使用ViewData

[ChildActionOnly]
public ActionResult _Menu()
{
    List<MenuItem> menu = new List<MenuItem>();
    menu.Add(new MenuItem("Master", "User", "ViewProfile", "Profile"));
    .... // add more items
    return PartialView(menu);
}

并在_Menu.cshtml

@model IEnumerable<Conference_Project.Areas.Master.Models.MenuItem>
@foreach (var item in Model)
{        
    <b>@item.controller</b>
    <b>@item.action</b>       
}

答案 1 :(得分:-1)

你想要传递到其他控制器/视图的内容应该在之前的操作中返回,我的意思是:

public ActionResult _Menu()
    {
        List<MenuItem> obj = new List<MenuItem>();
        obj.Add(new MenuItem("Master", "User", "ViewProfile", "Profile"));
        obj.Add(new MenuItem("Master", "User", "StepI", "Abstract"));           
        ViewData["MenuITem"] = obj;
        return PartialView(RETRUNVALUE);
    }

作为RETURNVALUE,您将在部分视图的控制器中使用值