Search code examples
asp.net-mvc-3facebook-comments

Add, view Comments in ASP.NET MVC3 like in Facebook


I've almost got it finished. but there's a little problem in adding comments.

I've created a Database which has "Gallery" and "Commment ". Then I created an Model as well.

public class GalleryEntries
{
    public IList<GalleryEntry> Entries { get; set; }

    public GalleryEntries()
    {
        Entries = new List<GalleryEntry>();
    }
}

public class GalleryEntry
{
    public Gallery GalleryImage { get; set; }
    public List<Comment> Comments { get; set; }
    public Comment Comment { get; set; }
}

Then my Controller looks like this.

GalleryDataContext GalleryDB = new GalleryDataContext();

    GalleryEntries galleryentries = new GalleryEntries();

    public ActionResult Index()
    {    

        foreach (Gallery gallery in GalleryDB.Galleries)
        {
            GalleryEntry galleryentry = new GalleryEntry();
            galleryentry.Comments = GalleryDB.Comments.Where(c => c.BildID == gallery.ImageID).ToList();
            galleryentry.GalleryImage = gallery;
            galleryentries.Entries.Add(galleryentry);
        }

        return View(galleryentries);
    }

    [HttpPost]
    public ActionResult Index(Comment comment)
    {
        Comment newComment = new Comment();

        newComment.BildID = comment.BildID;
        newComment.Comment1 = comment.Comment1;

        GalleryDB.Comments.InsertOnSubmit(newComment);
        GalleryDB.SubmitChanges();

        return RedirectToAction("Index");
    }    

Finally, the view..

@model KK_Online.Models.GalleryEntries

@foreach (var item in Model.Entries){

// here comes the picture and the written comments below.. it works perfectly..

//then down here I tried to create textarea..

@using (Html.BeginForm())
       {
            @Html.ValidationSummary(true)

        <div class="add_comment"> 
                <fieldset>
                    <legend> Add Comment </legend>

                    @Html.EditorFor(model => item.Comment.BildID)
                    @Html.ValidationMessageFor(model => item.Comment.BildID)
                    <br />

                    @Html.TextAreaFor(model => item.Comment.Comment1)
                    @Html.ValidationMessageFor(model => item.Comment.Comment1)

                   <br />

                    <button type="submit">Add Comment </button>

                </fieldset>

          </div>

       }
}

Now When I type the appropriate PictureID, and write my comments and submit it, it displays that "

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Comment_Gallery". The conflict occurred in database "PhotoComment", table "dbo.Gallery", column 'ImageID'.
The statement has been terminated.

"

Could anyone help me please?


Solution

  • I found the answer.

    simply put the Comment database inside Galleryentries class, because we're handling with this class in the view.

    public class GalleryEntries
    {
        public IList<GalleryEntry> Entries { get; set; }
    
        public GalleryEntries()
        {
            Entries = new List<GalleryEntry>();
        }
    
        public Comment Comment {get; set;}
    }