大家好消息。我有一点问题。我无法在表格中显示数据。我将代码移动到HomeContoller,它修复了null对象的错误。
家庭控制器
using NarkomApp.Models;
使用System.Collections.Generic; 使用System.Web.Mvc;
命名空间NarkomApp.Controllers { 公共类HomeController:控制器 { NarkomEntities dbModel = new NarkomEntities();
public ActionResult Index()
{
return View();
}
public ActionResult PersonalPage()
{
PersonalPageModel personalPageModel = new PersonalPageModel();
List<USERS> list_Users = new List<USERS>();
List<PERSONAL_INF> list_PersonalInf = new List<PERSONAL_INF>();
personalPageModel.list_Users = list_Users;
personalPageModel.list_PersonalInf = list_PersonalInf;
personalPageModel.ChangePasswordErrorMessage = "Новый пароль совпадает со старым!";
return View("~/Views/Home/PersonalPage.cshtml", personalPageModel);
}
public ActionResult AddOrEdit()
{
return View();
}
public ActionResult LogOut()
{
int iIdUser = (int)Session["iIdUsers"];
Session.Abandon();
return RedirectToAction("Index", "Home");
}
}
查看代码:
@model NarkomApp.Models.PersonalPageModel
@if (Model != null)
{
<table border="0">
<tr>
<td colspan="2"><h2>Персональные данные</h2></td>
<td></td>
</tr>
@foreach (var personalInf in Model.list_PersonalInf)
{
<tr>
<td><p>Город:</p></td>
<td>@Html.Label(@personalInf.vCity, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>ФИО:</p></td>
<td>@Html.Label(@personalInf.vFIO, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Индекс:</p></td>
<td>@Html.Label(@personalInf.vIndex, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Населенный пункт:</p></td>
<td>@Html.Label(personalInf.vLocality, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Улица:</p></td>
<
<td>@Html.Label(@personalInf.vStreet, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Дом/корпус/строение:</p></td>
<td>@Html.Label(@personalInf.vHome, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Квартира:</p></td>
<
<td>@Html.Label(@personalInf.vApartment, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Телефон:</p></td>
<td>@Html.Label(@personalInf.vPhone, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
}
<tr>
<td colspan="2"><hr /></td>
<td></td>
</tr>
<tr>
<td colspan="2"><h2>Форма изменения данных</h2></td>
<td></td>
</tr>
@foreach (var personalInf in Model.list_PersonalInf)
{
<tr>
<td><p>Город:</p></td>
<td>@Html.Editor(@personalInf.vCity, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>ФИО:</p></td>
<td>@Html.Editor(@personalInf.vFIO, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Индекс:</p></td>
<td>@Html.Editor(@personalInf.vIndex, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Населенный пункт:</p></td>
<td>@Html.Editor(personalInf.vLocality, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Улица:</p></td>
<
<td>@Html.Editor(@personalInf.vStreet, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Дом/корпус/строение:</p></td>
<td>@Html.Editor(@personalInf.vHome, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Квартира:</p></td>
<
<td>@Html.Editor(@personalInf.vApartment, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><p>Телефон:</p></td>
<td>@Html.Editor(@personalInf.vPhone, new { htmlAttributes = new { @class = "form-control" } })</td>
</tr>
<tr>
<td><input type="submit" value="Изменить" class="btn-submit" /></td>
<td><input type="reset" value="Очистка" class="btn-submit" /></td>
</tr>
}
<tr>
<td colspan="2"><hr /></td>
<td></td>
</tr>
<tr>
<td colspan="2"><h2>Форма изменения пароля</h2></td>
<td></td>
</tr>
@foreach (var users in Model.list_Users)
{
<tr>
<td><p>Старый пароль:</p></td>
<td>
@Html.Editor(Model.NewPassword, new { htmlAttributes = new { @class = "form-control" } })<br />
@Html.ValidationMessage(Model.NewPassword, "", new { @class = "text-danger" })
</td>
</tr>
<tr>
<td><p>Новый пароль:</p></td>
<td>
@Html.Editor(@users.vPassword, new { htmlAttributes = new { @class = "form-control" } })<br />
@Html.ValidationMessage(@users.vPassword, "", new { @class = "text-danger" })
</td>
</tr>
<tr>
<td><p>Подтвердите пароль:</p></td>
<td>
@Html.Editor(@users.ConfirmPassword, new { htmlAttributes = new { @class = "form-control" } })<br />
@Html.ValidationMessage(@users.ConfirmPassword, "", new { @class = "text-danger" })
</td>
</tr>
}
<tr>
<td><input type="submit" value="Изменить" class="btn-submit" /></td>
<td><input type="reset" value="Очистка" class="btn-submit" /></td>
</tr>
<tr>
<td colspan="2"><hr /></td>
<td></td>
</tr>
<tr>
<td colspan="2"><p>Подписаться на рассылку</p> @Html.CheckBox("cbIsSendInf", true)</td>
<td></td>
</tr>
<tr>
<td colspan="2"><hr /></td>
<td></td>
</tr>
<tr>
<td colspan="2">@Html.ActionLink("Выход из аккаунта!", "LogOut", "Home", null, new { @class = "form-control" })</td>
<td></td>
</tr>
</table>
} @* End if *@
else
{
<h2>Проблема с сессией, пустой объект!</h2>
}
答案 0 :(得分:0)
尝试将PersonalPageModel personalPageModel = new PersonalPageModel();
放在ActionResult
内,或者如果您想在外面,请尝试为您的模型指定public
或private
。我希望有所帮助!
P.S。在调试模式下运行并在返回之前放置断点。检查你的变量,看看它们中的变量,我希望这可以帮助你缩小你的问题范围!
答案 1 :(得分:0)
我认为最好只返回一个新的PersonalPageModel
,而不仅仅是编辑每个动作。请记住,任何Web应用程序中的每个控制器都是无状态的 - 因此您不会在另一个请求中拥有相同的对象(ofc,您可以拥有静态对象,但我认为在这种情况下使用静态模型并不好)
我认为这可以解决你的情况:
return View("~/Views/Home/PersonalPage.cshtml", new PersonalPageModel(){
ChangePasswordErrorMessage = "Новый пароль совпадает со старым!",
list_Users = new List<USERS>(),
list_PersonalInf = new List<PERSONAL_INF>()
});
现在在你的情况下,你在每个请求中都创建了一个PersonalPageModel的新对象,我认为这不是很好。
答案 2 :(得分:0)
在操作Model
中创建视图Method
的实例,如下所示:
//PersonalPageModel personalPageModel = new PersonalPageModel();---> remove this
// GET: PersonalPage
public ActionResult PersonalPage()
{
PersonalPageModel personalPageModel = new PersonalPageModel(); // use here in the action method instead
List<USERS> list_Users = new List<USERS>();
List<PERSONAL_INF> list_PersonalInf = new List<PERSONAL_INF>();
personalPageModel.list_Users = list_Users;
personalPageModel.list_PersonalInf = list_PersonalInf;
personalPageModel.ChangePasswordErrorMessage = "Новый пароль совпадает со старым!";
return View("~/Views/Home/PersonalPage.cshtml", personalPageModel);
}
不要像以前那样在Controller
中实例化它,它可以揭露它的计划外修改,而且克里斯普拉特指出它并不是最好的。