Почему я получаю «Ссылка на объект не установлена ​​на экземпляр объекта». пример - PullRequest
0 голосов
/ 27 февраля 2012

В настоящее время я работаю над книгой Pro Asp.net mvc3 Framework Адама Фримена и Стивена Сандерсона Апресса, и я столкнулся с проблемой в главе 20 (Jquery).Вот пример из книги.Перечисление 20-1.Пример приложения Index.cshtml

@using MvcApp.Models;
@model IEnumerable<Summit>
@{
ViewBag.Title = "List of Summits";
}
<h4>Summits</h4>
<table>
<thead>
</thead>
@foreach (Summit s in Model) {
<tr>
<td>@s.Name</td>
<td>@s.Height</td>
<td>
@using (Html.BeginForm("DeleteSummit", "Home")) {
@Html.Hidden("name", @s.Name)
<input type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
@Html.ActionLink("Add", "AddSummit")
@using (Html.BeginForm("ResetSummits", "Home")) {
<input type="submit" value="Reset" />
}

Модель представления для этого представления - это последовательность объектов Summit, в которой класс саммита имеет два свойства: Имя и Высота.В контроллере мы генерируем некоторые примеры саммитов и передаем их представлению, генерируя HTML, показанный в листинге 20-2.

Вот мой код: Отправить код модели

public class Summit

    {
    public string Name { get; set; }
    public int Height { get; set; }
}

SummitController

public ActionResult Index()
{
    Summit[] summit = new Summit[10];
    summit[0].Height = 1;
    summit[0].Name = "himan";
    return View();
}

Index.cshtml

@using MvcApp.Models;
@model IEnumerable<Summit>
@{
ViewBag.Title = "List of Summits";
}
<h4>Summits</h4>
<table>
<thead>
</thead>
@foreach (Summit s in Model) {
<tr>
<td>@s.Name</td>
<td>@s.Height</td>
<td>
@using (Html.BeginForm("DeleteSummit", "Home")) {
@Html.Hidden("name", @s.Name)
<input type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
@Html.ActionLink("Add", "AddSummit")
@using (Html.BeginForm("ResetSummits", "Home")) {
<input type="submit" value="Reset" />
}

Всякий раз, когда я запускаю этот код.Я всегда получаю ссылку на объект, а не на экземпляр объекта.Я новичок в mvc3, поэтому не совсем понимаю, откуда эта проблема.

Ответы [ 2 ]

6 голосов
/ 27 февраля 2012

В вашем SummitController вы не передали значение представлению:

public ActionResult Index()
{
    Summit[] summit = new Summit[10];
    summit[0].Height = 1;
    summit[0].Name = "himan";
    return View(summit);
}

Также обязательно предоставьте представлению нужную модель: ожидаемое IEnumerable not Array of Summit []

Дальнейшее редактирование относительно вашего комментария: я бы использовал список <>, например:

 public ActionResult Index()
    {
        List<string> mylist = new List<string>();
        mylist.Add("test2");
        mylist.Add("test3");
        mylist.Add("test4");

        IEnumerable<string> myIEnumebrableList = mylist;

        return View(myIEnumebrableList);
    }
1 голос
/ 27 февраля 2012

MasterP,

ЕСЛИ проблема связана с передаваемой моделью, затем попробуйте следующее:

public ActionResult Index()
{
    Summit[] summit = new Summit[10];
    for (int index = 0; index < summit.Length; index++)
    {
        summit[index] = new Summit();
    }
    summit[0].Height = 1;
    summit[0].Name = "himan";
    return View(summit.AsEnumerable());
}

это гарантирует, что модель передается в AND и является явно перечислимой. Также обратите внимание на строку: summit[index] = new Summit();. это необходимо, так как установка массива объектов (саммит) инициализирует их все как нулевые объекты, а не как новые члены класса.

Мое личное мнение таково, что в реальной жизни вы бы инициализировали Summit как IList<Summit>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...