首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 5动态导航栏2层

MVC 5动态导航栏2层
EN

Stack Overflow用户
提问于 2014-05-23 07:47:39
回答 1查看 3.7K关注 0票数 1

我现在有一个导航栏,它是从MS数据库动态创建的,但是我想添加第二个子层。下面是我到目前为止工作的单级导航栏。

导航

代码语言:javascript
复制
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

代码语言:javascript
复制
[ChildActionOnly]
public ActionResult Navigation()
{
    var navigationModel = (from m in db.Navigations where (m.Main == true) orderby m.Position select m);
    return View(navigationModel);
}

导航

代码语言:javascript
复制
@{ 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>

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

含量

代码语言:javascript
复制
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; }
}

请有人提供教程或示例代码,说明我如何将子数据绑定到父数据集,然后在“视图”中,如何检查父记录是否包含子记录,如果有,则循环遍历它们。

如能提供任何帮助,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 08:35:31

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

NavigationViewModel

代码语言:javascript
复制
namespace WebApplication1.Models
{
    public class NavigationViewModel
    {
        public List<Navigation> Navigation { get; set; }
        public List<Content> Content { get; set; }
    }
}

HomeController

代码语言:javascript
复制
[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);
}

导航

代码语言:javascript
复制
@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>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23823735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档