当我打开视图时,我在模型mvc中有null对象

时间:2017-06-30 15:10:47

标签: c# asp.net-mvc asp.net-mvc-4 view

大家好消息。我有一点问题。我无法在表格中显示数据。我将代码移动到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>
        }

3 个答案:

答案 0 :(得分:0)

尝试将PersonalPageModel personalPageModel = new PersonalPageModel();放在ActionResult内,或者如果您想在外面,请尝试为您的模型指定publicprivate。我希望有所帮助!

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中实例化它,它可以揭露它的计划外修改,而且克里斯普拉特指出它并不是最好的。