我有一个包含多个模型的视图页面,我无法显示数据,但我可以保存任何添加的数据。它只是在页面上显示数据加载告诉我,我传入的模型传递了一个空引用。
主要观点:
@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>
}
答案 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 { }
})
为其他模型做这个希望它会帮助你。