是否可以在mvc5中动态检索和显示视图名称?

时间:2017-04-11 16:49:16

标签: c# asp.net-mvc

您好我想动态显示视图名称。我会详细解释我的问题。

我动态地在布局页面中添加了菜单。现在我想要的是我点击菜单列表中的任何名称,它重定向到该控制器

布局页面中的动态菜单例如格式

1)账户主人

1.1)账户

1.2)帐户类别

现在,如果我点击帐户,它就会转到帐户控制器。同时我想在控制器中获取该视图名称Accounts。然后使用session我可以将名称从视图传递到控制器。任何人都可以告诉我如何通过菜单布局页面中的选定值获取视图名称。可能吗?在Windows中,我看到了这种方法。但我正在努力在mvc中做到这一点。

我的模特

菜单型号

 public class Menu
  {
    public Menu()
    {
        MenuItems = new List<MenuItem>();
        SubMenuItems = new List<SubMenuviewmodel>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    public List<MenuItem> MenuItems { get; set; }
    public List<SubMenuviewmodel> SubMenuItems { get; set; }
}

SubMenuViewModel

 public class SubMenuviewmodel
  {
    public string SubMenu { get; set; }
    public string ActionName { get; set; }
    public string MainMenuName { get; set; }        
    public string ControllerName { get; set; }
    public string subid { get; set; }
 }

菜单项

  public class MenuItem
  {
    public int Id { get; set; }
    public int UserName { get; set; }
    public string Name { get; set; }
    public string ActionName { get; set; }
    public string ControllerName { get; set; }
    public string Url { get; set; }
    public Menu ParentMenu { get; set; }
  }

我的控制器(菜单控制器)

   public ActionResult SubMenu()
    {
        var menu = new Menu();

        var mainmenu = db.ApplicationNames.Select(e => new
        {
            uid = e.UID,
            mainmenuname = e.ApplicationName1
        }).ToList();

        var menuitemlist = new List<MenuItem>();
        for (var item = 0; item < mainmenu.Count();item++ )
        {
            var mainmenuitems = new MenuItem { Name = mainmenu[item].mainmenuname.ToString(),Id=mainmenu[item].uid };
            menuitemlist.Add(mainmenuitems);
        }
        menu.MenuItems = menuitemlist;
      //submenu
        var submenu = db.SubAplicationNames.Select(e => new
        {
            submenuuid = e.SubAplicationNameID,
            submenuname = e.SubMenuName,
            submenuparentidd = e.ApplicationID,
            mainmenuname=e.ApplicationName

        }).ToList();

        var submenulist = new List<SubMenuviewmodel>();
        for (var item = 0; item < submenu.Count();item++ )
        {
            var submenuitemslist = new SubMenuviewmodel { SubMenu = submenu[item].submenuname.ToString(),subid=submenu[item].submenuparentidd.ToString()
                ,ControllerName="Home",ActionName="Index" };
            submenulist.Add(submenuitemslist);
        }
        menu.SubMenuItems = submenulist;
            return View(menu);
    }

我的观点

 @model DynamicMenuLoading.Models.Menu
@{
    Layout = null;
 }
  @foreach (var MainMenu in Model.MenuItems)
 {
   <a href="#">
        <span>@MainMenu.Name</span>
    </a>
    <ul class="nav nav-second-level collapse">
    @foreach (var SubMenu in Model.SubMenuItems.Where(x => x.subid == MainMenu.Id.ToString()))
    {
     <ul>
     <li><a href="@Url.Action(SubMenu.ActionName, SubMenu.ControllerName)"><i class="fa fa-circle-o"></i>@SubMenu.SubMenu</a>

      //tried @Session["Name"]=@SubMenu.SubMenu;
    </li>           
    </ul>
    }
</ul>
 }

  public ActionResult Index()
   {
     var viewname =Session["Name"];
   }

此处此代码用于在布局页面中加载meny dyanmically。现在我想将我选择的视图名称传递给控制器​​。我试着用session。得到名称是会话,并试图传递给控制器​​。但它失败了.Failed在某种意义上它在控制器中给出了null值,在视图中给出了错误的输出。任何一个undertsand我的问题,并帮助我解决这个问题。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以通过在网址中传递其他参数来执行此操作,例如

href="@Url.Action(SubMenu.ActionName, SubMenu.ControllerName , new {Title=SubMenu.SubMenu})"

在您的操作中,您可以获得标题

public ActionResult Accounts(string Title)
   {
     // your code here
   }