ASP.NET MVC3 Отображение названия заголовка из вторичной таблицы - PullRequest
0 голосов
/ 26 января 2012

Сначала я делаю учебник по MVC3 с кодом. В основном у меня есть 3 таблицы, сообщения, комментарии и блоги

    public class Blog
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string BloggerName { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}

public class Comment
{
    public int ID { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int PostID { get; set; }
    public Post Post { get; set; }
}

public class Post
{
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int BlogID { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

И я хочу отобразить сообщение на странице сообщения, в котором есть идентификатор блога. Итак, в моем контроллере на данный момент у меня есть следующее: -

        public ViewResult Index()
    {
        PostViewModel model = new PostViewModel();
        model.Posts = db.Posts.ToList();

        foreach (var item in model.Posts)
        {
            model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault();
        }

        return View(model);
    }

с представлением, имеющим следующее: -

@foreach (var item in Model.Posts) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Title)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.DateCreated)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Content)
    </td>
    <td>
        @Html.DisplayFor(modelItem => modelItem.Blog.Title)
    </td>
</tr>

}

Что я хочу знать, так это как получить заголовок блога из сообщений. Чем мне заменить это на: -

            foreach (var item in model.Posts)
        {
            model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault();
        }

чтобы он работал?

Спасибо за вашу помощь и время

Ответы [ 4 ]

1 голос
/ 26 января 2012

После добавления виртуального свойства Blog в класс Post вы можете использовать Blog.Title в своих представлениях.

1 голос
/ 26 января 2012

Вы можете добавить ссылку на блог в своей модели Post вместо BlogId.


public class Post
{
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public Blog Blog { get; set; }
    public ICollection Comments { get; set; }
}

Таким образом, ваш цикл станет:


foreach (var item in model.Posts)
{
   item.Blog = db.Blogs.Where(b => b.ID == item.Blog.ID).FirstOrDefault();
}

0 голосов
/ 26 января 2012

Я предполагаю, что вам нужно просто установить свойство Blog модели в качестве блога одного из постов (например, первого поста, поскольку все посты принадлежат одному и тому же блогу)

var post = model.Posts.FirstOrDefault();
model.Blog = post == null ? null : db.Blogs.Where(blog => blog.ID == post.BlogID);
0 голосов
/ 26 января 2012

Вы можете напрямую назначить объекту блога сообщение

   foreach (var post in model.Posts)
   {
       post.Blog = db.Blogs.FirstOrDefault(b => b.ID == item.BlogID);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...