1

我最近开始使用 MVC,作为一个测试项目,我正在创建一个简单的“博客”。我有一个基本结构,主页显示所有帖子,当您单击它时,它将进入详细信息页面。

结构

现在我正在尝试comments从视图中将 (Comment.cs) 添加到我的帖子中Home/Details,这基本上要求我在 1 个视图中拥有 2 个模型。模型 1 为Post模型,模型 2 为Comment模型;

  • Post.cs 用于获取帖子的详细信息
  • Comment.cs 用于给帖子添加评论

这是我的Home/details观点的代码:

@model MVCPortfolio.Models.Post

@{
    ViewBag.Title = "Details";
}

<h2>@Model.Title - @Model.Author</h2>

<fieldset>
    <legend>Posted on @Model.Date.ToShortDateString()</legend>
    <div class="content">
         @Model.Content
    </div>
</fieldset>
    <div class="comments">
        <ul>
            @foreach (var c in Model.Comments)
            {
            <li>
                @c.Content - @c.Author
            </li>
            }
        </ul>
    </div>
<div class="newcomment">
@*  @Html.EditorFor(model => model) *@
</div>

<p>
@* 
    @Html.ActionLink("New Comment", "Comment", new { id = Model.PostId }) 
*@
    |
    @Html.ActionLink("Back to List", "Index")
</p>

这是我的家庭控制器,我想在其中添加评论。

    private PortfolioEntities db = new PortfolioEntities();

    //
    // GET: /Home/

    public ActionResult Index()
    {
        var posts = (from p in db.Posts
                     orderby p.Date
                     select p);

        return View(posts);
    }

    public ActionResult Details(int id)
    {
        var post = (from p in db.Posts
                    where p.PostId == id
                    select p).Single();

        return View(post);
    }

    [HttpPost]
    public ActionResult Comment(Comment comment)
    {
        if (ModelState.IsValid)
        {
            db.Comments.Add(comment);
            db.SaveChanges();

            return RedirectToAction("Details");
        }

        return View(comment);
    }
}

但我不明白的是如何添加comment到 中post,我可以轻松地添加一个新的post参见我的 Create.cshtml 视图),但我无法弄清楚如何commentpost详细视图中添加一个。

谢谢你的时间,托马斯

4

1 回答 1

2

鉴于澄清,我认为您应该为此创建一个局部视图

在您看来,替换

@Html.ActionLink("New Comment", "Comment", new { id = Model.PostId }) 

调用渲染局部视图

@Html.Partial("_Comment")

您的局部视图应该处理 UI 以添加Comment,以调用您的Comment操作方法结束PostController

于 2013-01-21T10:15:49.370 回答