如何使用MVC视图和部分视图显示嵌套数据

时间:2009-07-13 22:54:59

标签: asp.net-mvc

我正在处理的问题非常类似于StackOverflow显示问题的方式,其评论,帖子和与帖子相关的评论。层次结构是相同的。

如何在ASP.Net MVC中完成?

到目前为止,我有这个:(我已将文件命名为SO网站,以使我的问题更具可读性)

查看/问题/ Details.aspx

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

这会加载详细信息并显示问题。

我有一个名为QuestionComment的用户控件,它应显示问题的注释,但我不知道如何进行连线。我一直在使用Dinners解决方案作为指南。

2 个答案:

答案 0 :(得分:4)

创建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>

...

答案 1 :(得分:0)

在你的视图中写下这样的东西;

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

<%=question.bodyText%>

<%}%>

希望这有帮助,如果不发表评论,我就不那么神秘了。