繁体   English   中英

ASP.NET MVC NullreferenceException:System.Web.Mvc.WebViewPage <TModel> 。模型.get。 <Field at offset 0x00000004> 为空

[英]ASP.NET MVC Nullreferenceexception: System.Web.Mvc.WebViewPage<TModel>.Model.get.<Field at offset 0x00000004> was null

我正在为学校设计一个项目(ASP.NET MVC),但是今天我遇到了这个错误。 我已经尝试修复了几个小时,但没有任何效果。 在此应用程序中,您登录后,您的个人资料将被加载。 这可行,但是只要我更改配置文件数据(以表单的形式),发布它并使用刷新的viewmodel返回视图(这仍然可以正常工作),我就会得到此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>

我的HomeController看起来像这样:

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

异常详细信息:

System.NullReferenceException:'对象引用未设置为对象的实例'

System.Web.Mvc.WebViewPage.Model.get。 为空。

在此先感谢,我真的不知道在哪里可以找到此空值

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM