代码之家  ›  专栏  ›  技术社区  ›  Thomas van Schijndel

ASP。NET MVC Nullreferenceexception:系统。网状物Mvc。WebViewPage<TModel>。模型获取<偏移量0x00000004>处的字段为空

  •  0
  • Thomas van Schijndel  · 技术社区  · 8 年前

    我正在为学校做一个项目(ASP.NET MVC),但今天我遇到了这个错误。我已经尝试了几个小时来解决这个问题,但没有任何效果。 在此应用程序中,您将登录并加载您的配置文件。这是可行的,但只要我更改概要文件数据(以表单形式),发布它,并返回带有刷新视图模型的视图(这仍然可以很好地工作),我就会得到这个nullreferenceexception。我一直在查看此异常的详细信息,但无法找出什么是null,以及导致此异常的原因。

    这是我的观点:

    @model SailyWebApp.Viewmodels.HomeUserViewmodel
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <body>
        @if(Session["User"] != null && !string.IsNullOrEmpty(Convert.ToString(Session["User"])))
         {
        <h2>Profile of @Session["User"].ToString()</h2>
        <form runat="server" method="post" id="userdata">
            Name:<br>
            <input type="text" name="Name" value="@Model.user.UserName" required /><br>
            Adress:<br>
            <input type="text" name="Address" value="@Model.user.Adress" required /><br>
            City:<br>
            <input type="text" name="City" value="@Model.user.City" required /><br>
            E-mail:<br>
            <input type="text" name="Mail" value="@Model.user.MailAdress" required /><br>
            Phone number:<br>
            <input type="text" name="Phonenumber" value="@Model.user.PhoneNumber" required /><br>
            Profile description:<br>
            <input type="text" name="Description" value="@Model.user.Description" required /><br>
            <input type="submit" name="Save" value="Save" />
        </form>
        }
        else{
        <p>Please log in</p>
        }
    </body>
    

    我的家庭控制器如下所示:

    public ActionResult Index()
        {
            if (Session["User"] != null)
            {
                User currentUser = (User)Session["User"];
                HomeUserViewmodel viewmodel = new HomeUserViewmodel();
                viewmodel.user = currentUser;
                return View(viewmodel);
            }
    
            return View();
        }
        [HttpPost]
        public ActionResult Index(HomeUserViewmodel viewmodel)
        {
            User currentUser = (User)Session["User"];
            if (Logic.UserLogic.EditProfile(viewmodel.Address, viewmodel.City, viewmodel.Mail, viewmodel.Phonenumber, viewmodel.Description, currentUser.UserId))
            {
                currentUser = Logic.UserLogic.LoadUser(currentUser.UserId);
                HomeUserViewmodel newviewmodel = new HomeUserViewmodel();
                viewmodel.user = currentUser;
                Session.Clear();
                Session["User"] = currentUser;
                return View(newviewmodel);
            }
            else
            {
                return View();
            }
        } 
    

    我的HomeUserViewmodel

    public class HomeUserViewmodel
    {
        public User user;
    
        private string name;
        private string address;
        private string city;
        private string mail;
        private string phonenumber;
        private string description;
    
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public string Address
        {
            get { return address; }
            set { address = value; }
        }
        public string City
        {
            get { return city; }
            set { city = value; }
        }
        public string Mail
        {
            get { return mail; }
            set { mail = value; }
        }
        public string Phonenumber
        {
            get { return phonenumber; }
            set { phonenumber = value; }
        }
        public string Description
        {
            get { return description; }
            set { description = value; }
        }
    }
    

    异常详细信息:

    系统NullReferenceException:“对象引用未设置为对象的实例”

    系统网状物Mvc。WebViewPage。模型收到为空。

    提前谢谢,我真的不知道在哪里可以找到这个空值

    1 回复  |  直到 8 年前
        1
  •  1
  •   Jonathon Chase    8 年前
    if (Logic.UserLogic.EditProfile(viewmodel.Address, viewmodel.City, viewmodel.Mail, viewmodel.Phonenumber, viewmodel.Description, currentUser.UserId))
    {
        currentUser = Logic.UserLogic.LoadUser(currentUser.UserId);
        HomeUserViewmodel newviewmodel = new HomeUserViewmodel();
        viewmodel.user = currentUser; // <- It's right here, this is your problem
        Session.Clear();
        Session["User"] = currentUser;
        return View(newviewmodel);
    }
    

    您在错误的对象上填充了用户字段,发送到视图的视图模型具有空字段,因此引发了空引用异常。