模型视图引用空引用

时间:2013-02-12 03:37:50

标签: asp.net asp.net-mvc asp.net-mvc-4 views model-view

我有一个包含多个模型的视图页面,我无法显示数据,但我可以保存任何添加的数据。它只是在页面上显示数据加载告诉我,我传入的模型传递了一个空引用。

主要观点:

@model Project.Models.ProfileModel
@{
    ViewBag.Title = "Profile";
}

<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
</hgroup>


<div id="wrap">
    <div id ="right">
        @(ViewBag.HasLocalPassword ? Html.Partial("_ChangePasswordPartial", Model.PasswordModel) : Html.Partial("_SetPasswordPartial", Model.PasswordModel))

    </div>
    <div id="left">
            @Html.Partial("_UsernamePartial", Model.UsernameModel)
            @Html.Partial("_PlayNamePartial", Model.PlayNameModel)

    </div>

</div>

我的模特:

 public class ProfileModel
{
    public PasswordModel PasswordModel { get; set; }
    public PlayNameModel PlayNameModel { get; set; }
    public UsernameModel UsernameModel { get; set; }
}

控制器 - 对于每个模型,我有一个get和post方法,除了PlayName只有一个GET。

用户名控制器:

public ActionResult _UsernamePartial()
    {
        var usernameModel = new UsernameModel();
        using (var db = new DataContext())
        {
            usernameModel.Username =
                (from u in db.Users where u.ID == WebSecurity.CurrentUserId select u.Username).FirstOrDefault();
        }
        return PartialView(usernameModel);
    }

@Html.Partial("_UsernamePartial", Model.UsernameModel)显示Object reference not set to an instance of an object.,我不确定如何正确解决此问题。

public ActionResult Profile(ManageMessageId? message)
    {
        ViewBag.StatusMessage =
            message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
            : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
            : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
            : "";
        ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
        ViewBag.ReturnUrl = Url.Action("Profile");
        return View();
    }

发布用户名:

[HttpPost]
    public ActionResult _UsernamePartial(UsernameModel usernameModel)
    {
        if (ModelState.IsValid)
        {
            using (var db = new DataContext())
            {
                User user = db.Users.FirstOrDefault(u => u.ID == WebSecurity.CurrentUserId);
                user.Username = usernameModel.Username;
                db.SaveChanges();
            }
        }
        return View("_UsernamePartial");
    }

用户名页面:

@model Acatar.Models.UsernameModel

@using (Html.BeginForm("_UsernamePartial", "Account")) {

       <p id="legend">Username</p>
       @Html.TextBoxFor(m=>m.Username)

    <button type="submit" value=" Username">Save</button>
}

2 个答案:

答案 0 :(得分:0)

你的Null Ref是没有绑定模型的View()工厂调用的结果。

答案 1 :(得分:0)

在Class

中使用此代码
public virtual PasswordModel PasswordModel1 
        {
            get {

                PasswordModel PasswordModel2 = this.PasswordModel.FirstOrDefault();

                if (PasswordModel2 == null)
                {
                    PasswordModel2 = new PasswordModel();

                }

                return PasswordModel2;
            }
        }

在视图中使用此代码

@Html.Partial("_UsernamePartial", Model.UsernameModel, new ViewDataDictionary(Html.ViewDataContainer.ViewData)
 {
     TemplateInfo = new System.Web.Mvc.TemplateInfo { }
 })  

为其他模型做这个希望它会帮助你。