我有文章模型和评论模型。 ArticleDetail视图显示文章,文章评论和创建新评论的公式。
为文章创建新评论时,它与文章具有相同的ID。 在公共ActionResult DisplayCreateComment(CommentModel注释,int articleID) CommentModel与文章具有相同的ID。
因此,每个发布的评论都将具有相同的ID,但这不起作用。为什么评论与文章相同,我该如何解决?
CommentModel:
public class CommentModel
{
public int ID { get; set; }
public string Text { get; set; }
public DateTime DateTime { get; set; }
public Article Art { get; set; }
}
ArticleModel:
public class ArticleModel
{
public int ID { get; set; }
public DateTime DateTime { get; set; }
public ICollection<CommentModel> Comments { get; set; }
public string Text { get; set; }
public string Title { get; set; }
...
}
ArticleDetail查看:
...
@Html.Partial("DisplayComments", Model.Comments)
@Html.Action("DisplayCreateComment", "Home", new { articleID = Model.ID })
...
HomeController中:
public ActionResult DisplayCreateComment(int articleID)
{
return PartialView();
}
[HttpPost]
public ActionResult DisplayCreateComment(CommentModel comment, int articleID)
{
...
//There the CommentModel has the same ID as the Article Model ...
}
答案 0 :(得分:0)
您的ArticleId
需要CommentModel
。除了您已有的内容之外,还要将以下内容添加到CommentModel
。
[ForeignKey("ArticleModel"), DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ArticleId { get; set; }
public virtual ArticleModel ArticleModel { get; set; }
此处有关您的问题的更多帮助:
Matt Blagden From Zero to Blog in 100 Minutes。
这可以帮助您创建整个博客,但它不使用Entity Framework Code First
。
Scott Allen's Plural Sight Video。
您可以使用试用版。这将向您展示如何实现one-to-many
个对象。有Department
和Employee
您可以创建部门(文章),然后以相同的方式添加员工(评论)。
基本上,您必须首先创建文章,然后在文章详细信息中添加评论。您所要做的就是在文章详细信息中有Create link
。
@Html.ActionLink("Create an comment", "Create", "Comment",
new {ArticleId = @Model.ArticleId}, null)
在Models文件夹/ ViewModels文件夹中创建CommentViewModel类
public class CreateCommentViewModel
{
[HiddenInput(DisplayValue = false)]
public int ArticleId { get; set; }
[Required]
public string Text { get; set; }
}
然后,让Comment Controller中的Create Actions看起来像这样;
[HttpGet]
public ActionResult Create(int articleId)
{
var model = new CreateCommentViewModel();
model.ArticleId= articleId;
return View(model);
}
[HttpPost]
public ActionResult Create(CreateCommentViewModel viewModel)
{
if(ModelState.IsValid)
{
var db = new EfDb();
var article= _db.Articles.Single(d => d.Id == viewModel.ArticleId);
var comment= new Comment();
comment.Text = viewModel.Text;
comment.DateTime = DateTime.UtcNow;
article.Comments.Add(comment);
db.SaveChanges();
return RedirectToAction("detail", "article", new {id = viewModel.ArticleId});
}
return View(viewModel);
}