帮助将主详细数据显示到mvc3视图中

时间:2011-08-25 05:18:00

标签: asp.net-mvc asp.net-mvc-3

我有以下型号:

public class Page
    {
        public int PageID { get; set; }
        public string Name { get; set; }
        public string Content { get; set; }
        public DateTime? DateCreated { get; set; }
        public bool IsPublished { get; set; }
        public string ModifiedBy { get; set; }
        public DateTime? DateModified { get; set; }

        public int UserID { get; set; }
        public int CategoryID { get; set; }

        public virtual User User { get; set; }
        public virtual Category Category { get; set; }
    }

public class Category
    {
        public int CategoryID { get; set; }

        [Required(ErrorMessage = "Category name is required.")]
        [Display(Name = "Category Name")]
        public string Name { get; set; }

        public virtual ICollection<Page> Pages { get; set; }

    }

我希望填充此导航列表:

<div id="centeredmenu" class="nav-border nav-color">
    <ul>
    @foreach (var pages in Model)
    {
        <li>CATEGORY NAME GOES HERE
            <ul>
               @foreach (var pages in Model)
               {
                <li>PAGE NAMES GO HERE</li>
                }
            </ul>
        </li>
    }
    </ul>
</div>

但是我在实现控制器方面遇到了问题。我试过这个ViewModel:

public class MainPageModels
    {
        public Category Categories { get; set; }
        public Page Pages { get; set; }
    }

但是这个错误消息让我更加困惑:

System.Data.Edm.EdmEntityType :: EntityType'MainPageModels'没有定义键。定义此EntityType的键。 System.Data.Edm.EdmEntitySet:EntityType:EntitySet MainModels 基于类型 MainPageModels ,没有定义键。

这是我的控制者:

public ActionResult Index()
        {
            var pages = db.MainModels.Select(p => p.Pages).Select(c => c.Category);
            return View(pages);
        }

我可能会在这里遗漏一些简单的东西。

2 个答案:

答案 0 :(得分:2)

在此处发布代码/语法

public class Person
{ 
   [Key]
   public int PersonID { get; set; }
   public string Name { get; set; }
   public string LastName { get; set; }
}
public class DataContext : DbContext
{
    EntitySet<Person> Persons { get; set; }
}

您的视图模型可以执行以下操作

public class PersonAddViewModel
{
   public string Name { get; set; }
   public string LastName { get; set; }

   public void CreateViewModelFromDataModel(Person person)
   {
      this.Name = person.Name;
      this.LastName = person.LastName ;
   }
}

这只是一个示例,只是为了显示数据模型和视图模型之间的区别 您的视图将是PersonAddViewModel的强类型视图

答案 1 :(得分:1)

这是我的父子列表问题的解决方案:

我创建了一个ViewModel来存放我的类别和页面:

public class HomeViewModels 
    {
        [Key]
        public int HomeViewKey { get; set; } //This is a MUST! 
        public IEnumerable<Category> ViewCategories { get; set; }
        public IEnumerable<Page> ViewPages { get; set; }

        public void CreateHomeViewModel(IEnumerable<Category> categories,
                                        IEnumerable<Page> pages)
        {
            this.ViewCategories = categories;
            this.ViewPages = pages;
        }        
    }

然后编辑我的控制器以填充viewmodel:

public ActionResult Index()
        {
            HomeViewModels homePages = new HomeViewModels();
            homePages.CreateHomeViewModel(db.Categories.ToList(),
                                          db.Pages.ToList());
            return View(homePages);
        }

最后使用以下内容创建ul-li列表:

@{var hvCategories = Model.ViewCategories;}
@foreach (var categories in hvCategories)
    {
        <li>@Html.ActionLink(categories.Name, "Index", "Home")
            <ul>
                @{var hvPages = Model.ViewPages
                                .Where(p => p.CategoryID == categories.CategoryID);}
                @foreach (var pages in hvPages)
                {
                    <li>@Html.ActionLink(pages.Name, "Index", "Home")</li>
                }
            </ul>
    </li>

我希望这有助于任何计划使用父子模型构建嵌套列表的人。这花了我两天时间弄明白。干杯!