Question

Tout d'abord, je voudrais vous montrer mon modèle.

public class Blog
{
    [Key]
    public int BlogID { get; set; }
    public System.Nullable <DateTime> LastModified { get; set; }
    public System.Nullable<int> AidID { get; set; }
    public virtual BlogAid BlogAid{ get; set; }
    public System.Nullable<int> AuthorID { get; set; }
    public virtual BlogAuthor BlogAuthor { get; set; }
    public System.Nullable<int> CommentID { get; set; }
    public virtual ICollection<BlogComment> BlogComment { get; set; }
    public System.Nullable<int> TitleID { get; set; }
    public virtual BlogTitle BlogTitle { get; set; }
    public System.Nullable<int> ContentID { get; set; }
    public virtual BlogContent BlogContent { get; set; }
    public System.Nullable<int> NewsID { get; set; }
    public virtual BlogNews BlogNews { get; set; }
}

Surtout pour cette ligne:

public virtual ICollection<BlogComment> BlogComment { get; set; }

Cela signifie que j'ai 1 à plusieurs relations entre le blog et les commentaires, puis voir mon contrôleur:

var comments = from c in DB.BlogCommenttbl
                      join b in DB.Blogtbl on c.BlogID equals b.BlogID
                      where c.CommentID > 0
                      select new
                      { Comments = c.Comments, LastModified=c.LastModifed};

if (comments.FirstOrDefault() !=null)
{
    bpm.Blogs.BlogComment = new List<BlogComment>();

    foreach (var item in comments.ToList())
    {
        bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
    }
}

et la vue est

@foreach (var item in Model.Blogs.BlogComment)
{
    <h3>Start Bootstrap <small>@Html.DisplayText(item.LastModifed.ToString())</small></h3>
    <p>@Html.DisplayText(item.Comments.ToString())</p>
}

mais je l'ai eu Object reference not set to an instance of an object. erreur.

Ensuite, j'ai débogué le code et a constaté que

bpm.Blogs.BlogComment = new List<BlogComment>();

ne peut pas fonctionner, comment puis-je corriger ce bug?Ou de traiter de ce problème?

Était-ce utile?

La solution

Probablement, vous n'avez pas l'initialiser bpm.Blogs de la propriété.Avant la ligne bpm.Blogs.BlogComment = new List<BlogComment>(); vous devez initialiser Blogs:

bpm.Blogs = new Blog();

Autres conseils

if (comments.FirstOrDefault() !=null)
{
    bpm.Blogs.BlogComment = new List<BlogComment>();

    foreach (var item in comments.ToList())
    {
        bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
    }
}

Si commentaires ne contient pas tous les éléments du bloc de code ne sera pas exécuté.Si elle n'est pas exécutée, le bpm.Blogs.BlogComment ne sera pas instancié.Le changer en:

bpm.Blogs.BlogComment = new List<BlogComment>();

if (comments.FirstOrDefault() !=null)
{
    foreach (var item in comments.ToList())
    {
        bpm.Blogs.BlogComment.Add(new BlogComment{Comments=item.Comments, LastModifed=item.LastModified});
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top