我有一个数据库菜单结构,我想将其添加到site.master文件中。
我已经在StackOverflow上查看了其他问题,但无法在我的网站上使用此功能。
如何将用户控件添加到Site.Master文件?
Menu.ascx
<%foreach (MainMenuSort mainMenuSort in (List<MainMenuSort>)ViewData["MainMenuSortListDisplay"])
{ %>
<li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li>
<%foreach (SubMenuSort subMenuSort in (List<SubMenuSort>)ViewData["SubMenuSortListDisplay"])
{%>
<%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id)
{ %>
<li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li>
<%} %>
<%} %>
<%}%>
答案 0 :(得分:3)
您需要在母版页中使用Html.RenderPartial方法。
您需要在调用使用母版页的视图的任何操作中设置MainMenuSortListDisplay和SubMenuSortListDisplay视图数据键。
在你的主人中使用这个
<% Html.RenderPartial("~/Views/Shared/Menu.ascx");
路径需要是控件文件夹的app相对路径。通常这些都属于共享。您可以在共享文件夹下创建所需的结构。
要使此技术更强大,请使用强类型部分。在这个问题中,您可能会创建一个具有两个泛型集合作为属性的新类(MenuModel),并将其放在应用程序的models文件夹中。然后在模型的构造函数中调用一个填充列表的方法。
public class MenuModel
{
public IEnumerable<MainMenuSort> OuterList {get; set;}
public IEnumerable<SubMEnuSort> InnerList {get; set;}
public MenuModel()
{
VoidThatFillsTheInnerAndOuterList();
}
这意味着您可以在控制器中执行此操作
public ActionResult ShowAForm()
{
ViewData["MenuPartialData"] = new MenuModel();
return View();
}
设置此键后,您的母版页可以使用RenderPartial的重载,如此
<% Html.RenderPartial(
"~/View/Shared/Menu.ascx",
(MenuModel)ViewData["MenuPartialData"]); %>
这假设您的部分是对MenuModel类的强类型。然后在partial中你可以使用稍微重写代码的模型
<% foreach (MainMenuSort mainMenuSort in Model.OuterList) { %>
<li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li>
<% foreach (SubMenuSort subMenuSort in Model.InnerList) {%>
<%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id)
{ %>
<li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li>
<%} %>
<%} %>
<%}%>
希望有所帮助
答案 1 :(得分:0)
尝试类似
的内容<% Html.RenderPartial("Menu") %>
编辑:修正了错误
答案 2 :(得分:0)
您也可以将其作为HTMLHelper执行,并在MasterPage中调用&lt;%= Html.Menu()%&gt;。然后在HTMLHelper中,您将获得获取数据库记录并循环遍历它们的代码。这是我发现的link让你入门。请注意我的评论,因为提供的代码示例中存在错误。我仍然遇到处理子菜单菜单的问题,我想我需要一个递归函数或什么?
答案 3 :(得分:0)
在此link的帮助下。我能够在site.master页面中显示一个菜单。