【问题标题】:How to initialize my Model [duplicate]如何初始化我的模型 [重复]
【发布时间】:2014-01-10 12:19:32
【问题描述】:

首先,我想向您展示我的模型。

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

尤其是这一行:

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

这意味着我的博客和cmets之间是一对多的关系,那么看看我的控制器:

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

视图是

@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>
}

但我收到了Object reference not set to an instance of an object. 错误。

然后我调试了代码,发现

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

无法正常工作,我该如何修复这个错误?或者处理这个问题?

【问题讨论】:

  • '不能工作'是什么意思?例外?
  • 您的bpm.Blogsnull,因此您无法访问bpm.Blogs.BlogComment。我认为您可以使用bpm.Blogs = new Blog() 修复它。

标签: c# asp.net-mvc c#-4.0 icollection


【解决方案1】:

您可能没有初始化bpm.Blogs 属性。在bpm.Blogs.BlogComment = new List&lt;BlogComment&gt;(); 行之前,您必须初始化Blogs

bpm.Blogs = new Blog();

【讨论】:

    【解决方案2】:
    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});
        }
    }
    

    如果 cmets 不包含任何项目,则代码块将不会被执行。如果未执行,则不会实例化 bpm.Blogs.BlogComment。将其更改为:

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

    【讨论】:

    • 只有当我确定 cmets 不为空时才连接到博客,然后我想要新的 blogcmets 实例,我认为这不是根本原因。
    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 2021-08-09
    • 2020-08-31
    • 2018-11-09
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多