Как показать вложенные данные, используя MVC Views и PartialViews - PullRequest
1 голос
/ 14 июля 2009

Проблема, над которой я работаю, очень похожа на то, как StackOverflow отображает вопрос, его комментарии, сообщения и комментарии, связанные с сообщениями. Иерархия такая же.

Как это достигается в ASP.Net MVC?

Пока у меня есть следующее: (я назвал файлы, похожие на SO site, чтобы сделать мой вопрос более читабельным)

Просмотров / Вопросы / Details.aspx

public class QuestionsController : Controller
{
    public ActionResult Details(int? questionId)
    {
        Question question= _db.Question .First(i => i.QuestionId== questionId);
        return View(question);
    }
}

Это загружает детали и отображает вопрос.

У меня есть пользовательский элемент управления QuestionComment, который должен отображать комментарии к вопросу, но я не уверен, как его подключить. Я использовал решение Обедов в качестве руководства.

Ответы [ 2 ]

4 голосов
/ 14 июля 2009

Создать ViewModel для отображения Вопросов с комментариями. Примерно так:

public class QuestionViewModel
{
    public Question Question { get; set; }
    public IEnumerable<Comment> Comments { get; set; }
}

ваш контроллер становится:

public class QuestionsController : Controller
{
    public ActionResult Details(int? questionId)
    {
        var question = _db.Question.First(x => x.QuestionId == questionId);
        var comments = _db.Comment.Where(x => x.QuestionId == questionId).ToList();
        var model = new QuestionViewModel {
            Question = question,
            Comments = comments
        };
        return View("Details", model);
    }
}

Ваш "Подробности" Просмотр:

<%@ Page Inherits="System.Web.Mvc.ViewPage<QuestionViewModel>" %>

<% Html.Renderpartial("QuestionControl", model.Question); %>
<% Html.Renderpartial("CommentsControl", model.Comments); %>

Частичное представление "QuestionControl":

<%@ Control Inherits="System.Web.Mvc.ViewUserControl<Question>" %>

<h3><%= Model.Title %></h3>

...

Частичное представление "CommentsControl":

<%@ Control Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Comment>>" %>

<ul>
<% foreach (var comment in Model) { %>
    <li>
        <%= comment.Content %>
    </li>
<% } %>
</ul>

...
0 голосов
/ 14 июля 2009

На ваш взгляд напишите что-то вроде этого;

<% foreach (var question in Model.Questions) { %>

<%=question.bodyText%>

<%}%>

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

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