Помогите с отображением основных данных в виде mvc3 - PullRequest
0 голосов
/ 25 августа 2011

У меня есть следующие модели:

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 ainMainModels основан на типе ageMainPageModels , для которого не определены ключи.

Это мой контроллер:

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

Я могу упустить что-то простое здесь.

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Размещение здесь для кода / синтаксиса

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 голос
/ 26 августа 2011

Вот мое решение моей проблемы со списком «родитель-потомок»:

Я создал 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;
        }        
    }

Затем отредактировал мой контроллер для заполнения модели представления:

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>

Надеюсь, это поможет всем, кто планирует построить вложенный список, используя модель родитель-потомок.Это заняло у меня два дня, чтобы понять.Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...