【问题标题】:MVC 5 Dynamic Navigation Bar 2 TierMVC 5 动态导航栏 2 层
【发布时间】:2014-05-23 07:47:39
【问题描述】:

我目前有一个从 MS SQL 数据库动态创建的导航栏,但我想添加第二个子层。以下是我目前工作的单级导航栏的内容。

导航

public partial class Navigation
{
    public int Id { get; set; }
    public string Title { get; set; }
    public Nullable<int> Position { get; set; }
    public bool Main { get; set; }
    public string Action { get; set; }
    public string Controller { get; set; }
}

HomeController

[ChildActionOnly]
public ActionResult Navigation()
{
    var navigationModel = (from m in db.Navigations where (m.Main == true) orderby m.Position select m);
    return View(navigationModel);
}

导航

@{ Layout = null; }
@model IEnumerable<WebApplication1.Models.Navigation>

<ul class="nav sf-menu clearfix">
    @foreach (var item in Model)
    {
        @Html.MenuLink(item.Title, item.Action, item.Controller)
    }
</ul>

第二层需要链接到Contents表,关系是db.Navigations.Id = db.Contents.NavigationId。

内容

public partial class Content
{
    public int Id { get; set; }
    public Nullable<int> NavigationId { get; set; }
    public string Title { get; set; }
    public string Content1 { get; set; }
    public Nullable<int> Position { get; set; }
    public string Image { get; set; }
    public string Sub { get; set; }
    public Nullable<bool> Active { get; set; }
    public string Url { get; set; }
    public string Summary { get; set; }
}

有人可以提供一个教程或示例代码,说明我如何将子数据绑定到父数据集,然后在视图中,如何检查父级是否持有子记录,如果是,则循环它们。

任何帮助将不胜感激:-)

【问题讨论】:

    标签: c# asp.net navigation sql-server-2012 asp.net-mvc-5


    【解决方案1】:

    我添加了一个名为 NavigationViewModel 的新类来声明我希望使用的表,并修改了 HomeController 以使用 NavigationViewModel 来查询相应的表。

    NavigationViewModel

    namespace WebApplication1.Models
    {
        public class NavigationViewModel
        {
            public List<Navigation> Navigation { get; set; }
            public List<Content> Content { get; set; }
        }
    }
    

    HomeController

    [ChildActionOnly]    
    public ActionResult Navigation()
    {
        var navigationModel = new NavigationViewModel();
        navigationModel.Navigation = (from m in db.Navigations where (m.Main == true) orderby m.Position select m).ToList();
        navigationModel.Content = (from n in db.Contents where (n.Active == true) orderby n.Position select n).ToList();
    
        return View(navigationModel);
    }
    

    导航

    @model WebApplication1.Models.NavigationViewModel
    
    <ul class="nav sf-menu clearfix">
        @foreach (var navigation in Model.Navigation)
        {
            int records = Model.Content.Count(c => c.NavigationId == navigation.Id);
    
            if (records > 0)
            {
                @Html.SubMenuLink(navigation.Title, navigation.Action, navigation.Controller)
                @Html.Raw("<ul>")
                foreach (var content in Model.Content.Where(c => c.NavigationId == navigation.Id))
                {
                    if (string.IsNullOrEmpty(content.Url))
                    {
                        if (string.IsNullOrEmpty(content.Content1))
                        {
                        }
                        else
                        {
                            @Html.MenuLink(content.Title, "Home/Article/" + content.Id + "/" + ToFriendlyUrl(content.Title), "Home");
                        }
                    }
                    else
                    {
                        @Html.MenuLink(content.Title, content.Url, "Home");
                    }
                }
                @Html.Raw("</ul>")
                @Html.Raw("</li>")
            }
            else
            {
                @Html.MenuLink(navigation.Title, navigation.Action, navigation.Controller)
            }
        }
    </ul>
    

    我不确定这是实现最终目标的最优雅或最有效的方式,任何让代码更高效的建议我都很乐意倾听。

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2014-07-25
      相关资源
      最近更新 更多