ASP.NET MVC 3在文章视图中添加注释

时间:2011-03-28 09:11:01

标签: asp.net-mvc asp.net-mvc-3

我有public ICollection<Comment> Comments { get; set; }的文章模型和评论模型。我已经为文章(详细信息视图)创建了视图,我希望显示从模型文章(不是问题)和评论到文章到评论之后的所有内容然后显示用于向文章添加评论的表单(不在其他页面中,我希望它在用文章查看)。现在我有这个:

@model SkMoravanSvitavka.Models.Article

@{
    ViewBag.Title = "Zobrazit";
}

<h2>Zobrazit</h2>

<fieldset>
    <legend>Article</legend>

    <div class="display-label">Title</div>
    <div class="display-field">@Model.Title</div>

    <div class="display-label">Text</div>
    <div class="display-field">@Model.Text</div>

    <div class="display-label">PublishedDate</div>
    <div class="display-field">@String.Format("{0:g}", Model.PublishedDate)</div>
</fieldset>

@if (Model.Comments != null)
{
    foreach (var comment in Model.Comments)
    {
        @Html.Partial("_Comment", comment)
    }
}



<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.ArticleID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

它显示文章,并且对文章的所有评论都有部分视图。现在我不知道如何添加表单来添加评论。谢谢

编辑:这是我的评论控制器和创建方法(vytvorit =在捷克创建:)):

 public ActionResult Vytvorit(int articleID)
        {
            var newComment = new Comment();
            newComment.articleID = articleID; // this will be sent from the ArticleDetails View, hold on :).
           newComment.Date = DateTime.Now;
            return View(newComment);  
        } 

        [HttpPost]
        public ActionResult Vytvorit(Comment commentEntity)
        {
                db.Comments.Add(commentEntity);
                db.SaveChanges();
                return RedirectToAction("Zobrazit", "Clanek", new { id = commentEntity.articleID });
        }

当我将@Html.RenderAction更改为@Html.Action时,它有效。它显示文本框以供评论,我可以添加评论,但有问题,它不仅添加文本框,但它再次添加我的网站(不只是部分视图,但所有视图),我相信我添加创建视图评论为部分。< / p>

2 个答案:

答案 0 :(得分:7)

创建一个新的部分视图,使其成为类型为Comment的强类型视图。

从脚手架模板中选择“创建”模板。

处理正常添加评论的新方案。

将此部分视图添加到文章详细信息页面。

请注意,当您要保存新评论时,您需要获取托管文章ID。

希望现在很清楚,如果没有,请告诉我。

更新:假设您将“AddComment”部分视图添加到“文章详情”视图中,您可以执行以下操作以添加评论。

1-修改GET内的CommentController(创建)操作,如下所示:

public ActionResult Create(int articleID)
    {
            var newComment = new CommentEntity();
            newComment.articleID = articleID; // this will be sent from the ArticleDetails View, hold on :).

            return View(newComment);            
    }

1-按照以下方式进行POST(创建)操作:

[HttpPost]
public ActionResult Create(Comment commentEntity)
{
    // Complete the rest..
}

2-评论的部分视图如下所示:

@model NGO.Models.Comment

@using (Html.BeginForm())
        {            
            @Html.ValidationSummary(true)
            <div class="addcommentbox">
                <h2> Add Comment </h2>
                @Html.TextAreaFor(model => model.Description)
                <div class="ErrorMessage">
                @Html.ValidationMessageFor(model => model.Description)
                </div>                    
                <input id="addComment" type="button" onclick="" value="Add" />
            </div>

        }
3-在ArticleDetails页面内,在您需要添加注释部分显示的所需位置,使用RenderAction方法呈现AddComment部分视图,如下所示:

Html.RenderAction("Create", "Comment",new {articleID = Model.ID});

上一行将在GET内调用CommentColtroller(创建)操作并传递当前文章ID,因此AddComment部分视图将填充当前文章ID(这就是我们想要。)

就是这样,随时问我是否还不清楚,如果它适合你,请告诉我

答案 1 :(得分:1)

我强烈建议您为文章页面创建视图模型。喜欢下面一个;

public class ArticleViewModel { 

     public Article _article {get;set;}
     //this is for the comment submit section
     public Comment _comment {get;set;}
     //this for the comments that you will view
     public IQueryable<Comment> _comment {get;set;}         

}

之后,将其从您的控制器传递给您的视图,并使您的视图强烈地键入此ArticleViewModel类。

创建一个包含在form标签内的部分,如下所示;

@using(Html.BeginForm()){

     @*Put your code inside here.
       Create inputs for sending comments. like below;*@
     @Html.TextboxFor(Model._comment.Content)

}

然后为其创建一个方法;

[HttpPost]
[ActionName("name_of_your_article_page_action")]
public ActionResult Create(Comment commentEntity) {

}

注意:当然,您无需创建单独的viewmodel。您可以对输入的名称进行硬编码,但这使得很难使用验证和其他类型的东西。但是并非不可能使用验证!