1

我有一个文章模型和一个评论模型。ArticleDetail 视图显示文章、文章的评论和用于创建新评论的公式。

为文章创建新评论时,它与文章具有相同的 id。在公共 ActionResult DisplayCreateComment(CommentModel comment, int articleID) 中,CommentModel 具有与文章相同的 ID。

因此,每个发布的评论都将具有相同的 ID,这是行不通的。为什么评论的 id 与文章相同,我该如何解决?

评论型号:

    public class CommentModel
    {
        public int ID { get; set; }
        public string Text { get; set; }
        public DateTime DateTime { get; set; }
        public Article Art { get; set; }
     }

文章型号:

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; }
...
}

文章详情查看:

...
@Html.Partial("DisplayComments", Model.Comments)
@Html.Action("DisplayCreateComment", "Home", new { articleID = Model.ID })
...

家庭控制器:

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 ...


    }
4

1 回答 1

0

你需要ArticleId在你的CommentModel. CommentModel除了您已有的内容之外,还可以添加以下内容。

[ForeignKey("ArticleModel"), DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ArticleId { get; set; }

public virtual ArticleModel ArticleModel { get; set; }

更多关于您的问题的帮助:

Matt Blagden 在 100 分钟内从零到博客。这可以帮助您创建一个完整的博客,但它不使用Entity Framework Code First.

斯科特艾伦的复数视觉视频。您可以使用试用版。这将向您展示如何实现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);
    }
于 2013-05-16T19:18:37.093 回答