1

記事モデルとコメント モデルがあります。ArticleDetail ビューには、記事、記事へのコメント、および新しいコメントを作成するフォーミュラーが表示されます。

記事に新しいコメントを作成すると、記事と同じ ID になります。public 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ますCommentModelCommentModelすでに持っているものに加えて、以下を追加してください。

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

public virtual ArticleModel ArticleModel { get; set; }

ここであなたの問題に関する詳細なヘルプ:

Matt Blagden 100 分でゼロからブログへ. これは、ブログ全体を作成するのに役立ちますが、Entity Framework Code First.

Scott Allen の Plural Sight ビデオ. 試用版があります。これにより、オブジェクトの実装方法が示され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; }        
}

次に、コメント コントローラーの作成アクションを次のようにします。

    [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 に答える