我使用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>
}
抱歉英文不好, 感谢
答案 0 :(得分:1)
您可以创建代表评论数据的CommentViewModel
,并在ArticleViewModel
中设置ICollection<CommentViewModel>
来显示评论数据。
POST新评论的表单将是基于CommentViewModel
字段和操作(新)的表单,将CommentViewModel
作为参数。
通过这种方式,ModelBinder
将为您完成工作。
请记住,您的ViewModel必须始终表示您要显示的数据以及要传递给控制器的数据,因此MVC中的一个重要部分是根据您的用例创建正确的ViewModel。
您最后的批准是正确的,但请注意您模型中字段的名称必须与模型中的属性名称相同。
根据这个,您应该将验证属性添加到Comment
类中的属性,该属性应基于您的表单命名为
Id
Name
Content
HTH