MVC:从使用不同模型的视图中添加新模型实例

时间:2013-01-21 10:10:12

标签: c# asp.net-mvc

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

Structure

现在我正在尝试从comments视图中添加Home/Details(Comment.cs)到我的帖子,这基本上要求我在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,我可以轻松添加新的postsee my Create.cshtml view),但我不能弄清楚如何在comment详细信息视图中添加post

感谢您的时间, 托马斯

1 个答案:

答案 0 :(得分:2)

鉴于澄清,我认为您应该为此创建一个partial view

在您看来,替换

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

调用渲染局部视图

@Html.Partial("_Comment")

您的部分视图应该处理添加Comment的用户界面,最后在Comment

中调用PostController操作方法