如何通过验证在文章视图中添加评论部分?

时间:2013-06-10 14:59:10

标签: asp.net-mvc asp.net-mvc-4 content-management-system

我使用ASP.Net MVC 4开发了一个简单的CMS应用程序,它包含一个名为“Article”的操作方法,它将“Article”模型传递给视图:

// Article Model
public class Article
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Text { get; set; }
    [Required]
    public DateTime DateTime { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}
// Action method
public ActionResult Article(int id=1)
{
        return View(GetArticleById(id));
}

在我的“文章”视图中,我想要包含评论部分。现在我如何根据我在视图中使用“文章”作为模型来获取新的评论详细信息?以我自己的方式,我创建了一个类似下面的代码的表单,手动获取新的评论详细信息并将其发布到另一个名为“评论”的控件中名为“新”的操作,我会以正确的方式进行吗?通过这种方式,我没有成功验证新的评论输入。

@using(Html.BeginForm("New","Comment",FormMethod.Post))
{
<input type="hidden" name="Id" value="@Model.Id" />
<div class="input-div">
    <input placeholder="Your name" type="text" name="Name" />
    <textarea placeholder="Your Comment" class="comment-textarea" id="Txt" name="Content"></textarea>
</div>
<div>
    <input class="submit-btn" type="submit" value="Leave a comment" />
</div>
}

抱歉英文不好, 感谢

1 个答案:

答案 0 :(得分:1)

您可以创建代表评论数据的CommentViewModel,并在ArticleViewModel中设置ICollection<CommentViewModel>来显示评论数据。

POST新评论的表单将是基于CommentViewModel字段和操作(新)的表单,将CommentViewModel作为参数。

通过这种方式,ModelBinder将为您完成工作。

请记住,您的ViewModel必须始终表示您要显示的数据以及要传递给控制器​​的数据,因此MVC中的一个重要部分是根据您的用例创建正确的ViewModel。

您最后的批准是正确的,但请注意您模型中字段的名称必须与模型中的属性名称相同。

根据这个,您应该将验证属性添加到Comment类中的属性,该属性应基于您的表单命名为

Id
Name
Content

HTH