无法隐式转换类型' int'键入' Blogosphere.Models.Users'

时间:2014-11-27 16:36:20

标签: c# asp.net-mvc-4

大家好,

我搜索并搜索了如何执行此操作。

我有一个名为Posts.cs的域名模型

public class Posts
{
    [Key]
    public int PostID { get; set; }

    [Required(ErrorMessage="A Title is required for your Post")]
    [Display(Name="Title")]
    public string PostTitle { get; set; }


    [Required(ErrorMessage="This Field is Required")]
    [Display(Name = "Post")]
    public string PostContent { get; set; }

    [Required()]
    [DataType(DataType.DateTime)]
    public DateTime PostDate { get; set; }
    //public int AuthorID { get; set; }
    //public int CommentID { get; set; }

    [NotMapped]
    public virtual List<Comments> Comment { get; set; }
    public virtual Users user { get; set; }

}

所以我创建了一个名为PostsVM.cs的viewModel,以便将它呈现给视图并获取PostTitle和PostContent,因为它们是唯一需要编辑的字段

public class PostsVM
{
    [Required()]
    [Display(Name="Title")]
    public string PostTitle { get; set; }
    [Required()]
    [Display(Name="Post")]
    public string PostContent { get; set; }
}

由于帖子属于用户,因此行

public virtual Users user { get; set; }
在Posts.cs类中

。那是当我将帖子保存到数据库时,我必须将它与作为帖子作者的用户ID一起保存。我的控制器看起来像这样

[HttpGet]
public ActionResult Create()
{
    PostsVM model = new PostsVM();
    return View(model);
}


[HttpPost]
public ActionResult Create(PostsVM model)
{
    if (!ModelState.IsValid)
    {
        ModelState.AddModelError("", "Invalid Model");
    }
    BlogContext db = new BlogContext();
    var newPost = db.Post.Create();

    newPost.PostTitle = model.PostTitle;
    newPost.PostContent = model.PostContent;
    newPost.PostDate = DateTime.Now;
    FormsIdentity identity = (FormsIdentity)User.Identity;
    int nUserID = Int32.Parse(identity.Ticket.UserData);
    newPost.user = Int32.Parse(identity.Ticket.UserData);
    db.Post.Add(newPost);
    db.SaveChanges();
    return RedirectToAction("Index", "Posts");

}

我尝试做的是从存储在故障单中的userData获取userId并将其转换为行中的整数类型

newPost.user = Int32.Parse(identity.Ticket.UserData);

但是,上面的这一行显示为红色的粗线,错误为"Cannot implicitly convert type 'int' to type 'Blogosphere.Models.Users'.   所以我试着这样做

newPost.user.UserID = Int32.Parse(identity.Ticket.UserData);

但我在这一行调试了一个断点,我收到了一个错误

"Object reference not set to an instance of an object."

我知道这样做是错误的,因为它将访问User.cs类的所有属性。请问如何在我存储在故障单中的userdata中获取用户ID并将其保存在

public virtual Users user { get; set; } property of the Posts.cs class?
有人请帮忙。 StackOverflow非常有用。请?

1 个答案:

答案 0 :(得分:0)

newPost.user属性未初始化,访问newPost.user.UserID会抛出“对象引用未设置为对象的实例。”