Todor Iliev Ответов: 1

C# для прохождения список для просмотра, появляется сообщение об


Так что я новичок в C# и застрял на этом уже несколько часов. Я попробовал несколько проходов (ViewBag, ViewData, а также в качестве параметра). На мой взгляд, он говорит, что получает исключение NullPointerException в цикле foreach.

Что я уже пробовал:

это моя модель:
namespace SoPro3.Models
{
    public class BookingModel
    {
        public int ladestand { get; set; }
        public int fahrstrecke { get; set; }
        public DateTime startzeit { get; set; }
        public DateTime endzeit { get; set; }

    }
}



это мой контроллер:
namespace SoPro3.Controllers
{
    public class BookingController : Controller
    {
        //  
        // GET: /BookingModel/
        public ActionResult Index()
        {
            List<BookingModel> bookings = new List<BookingModel>() {
                new BookingModel
                {
                    ladestand = 10,
                    fahrstrecke = 100,
                    startzeit = new DateTime(2020, 10, 2, 8, 45, 0),
                    endzeit = new DateTime(2020, 10, 2, 12, 45, 0)
                },
                new BookingModel
                {
                    ladestand = 65,
                    fahrstrecke = 340,
                    startzeit = new DateTime(2020, 05, 3, 9, 45, 0),
                    endzeit = new DateTime(2020, 05, 3, 11, 45, 0)
                },
                new BookingModel
                {
                    ladestand = 30,
                    fahrstrecke = 150,
                    startzeit = new DateTime(2020, 09, 15, 22, 45, 0),
                    endzeit = new DateTime(2020, 09, 16, 0, 00, 0)
                }
                };

            return View(bookings);
        }
    }
}



Это моя точка зрения:
@model List<SoPro3.Models.BookingModel>

@{
    ViewBag.Title = "Index";
}

<!DOCTYPE html>

<html>
<head lang="en">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Bookings</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</head>
<body>

    <h1 class="display-4">Bookings</h1>
    <div class="text-center">
            <table>
                <tr>
                    <th>Ladestand</th>
                    <th>Fahrstrecke</th>
                    <th>Startzeit</th>
                    <th>Endzeit</th>
                </tr>

                @foreach (var item in Model)
                {
                    <tr>
                        <th>@item.ladestand</th>
                        <th>@item.fahrstrecke</th>
                        <th>@item.startzeit</th>
                        <th>@item.endzeit</th>
                    </tr>
                }
            </table>
        }
    </div>
</body>
</html>



Я попробовал несколько вещей, таких как изменение модели на IEnumeration<t>, но это, похоже, не работает так хорошо.

Richard MacCutchan

Причем тут исключение NullPointerException происходит, и что ссылка на переменную является одним, что является нулем?

Todor Iliev

Как я уже сказал, это происходит в цикле foreach в моем коде представления. Есть только один цикл по каждому элементу "@по каждому элементу (ВАР элемента в модель)" в строке 27, в частности, выхватывая из "модели".
Хир-это след, не знаю, поможет ли он:

NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
AspNetCore.Views_Home_Index.<executeasync>b__13_1() в Index.cshtml
-
Ladestand Fahrstrecke Startzeit Endzeit @foreach (var item in Model)
{
@пункту.ladestand @товар.fahrstrecke @item.startzeit @item.endzeitMicrosoft.AspNetCore.Razor.Время выполнения.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()
AspNetCore.Views_Home_Index.ExecuteAsync() в Index.cshtml
+
Видовой мешок.Title = "Индекс";
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(страница IRazorPage, контекст ViewContext)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(страница IRazorPage, контекст ViewContext, bool invokeViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(контекст ViewContext)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ActionContext actionContext, вид руки, экземпляр класса viewdatadictionary viewData, данных tempdata ITempDataDictionary, строки "contentType", допускающий значение null и Л;int&ГТ; состояния)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(контекст ActionContext, результат ViewResult)
Microsoft.AspNetCore.В MVC.ViewResult.ExecuteResultAsync(контекст ActionContext)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokenextresultfilterasync&ГТ;г__ожидаемый|29_0&ЛТ;tfilter, tfilterasync=""&ГТ;(вызывающего ResourceInvoker, задач lastTask, государство, сферы охвата, состояние объекта типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Оператор(ResultExecutedContextSealed контексте)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.ResultNext&ЛТ;tfilter, tfilterasync=""&ГТ;(исх государства, объем Реф область, состояние объекта Реф, Реф типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokenextresourcefilter&ГТ;г__ожидаемый|24_0(вызывающего ResourceInvoker, задач lastTask, государство, сферы охвата, состояние объекта типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Оператор(ResourceExecutedContextSealed контексте)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Следующий(государственный номер модели / ref рядом, сферу Реф область, состояние объекта Реф, Реф типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokeasync&ГТ;г__ожидаемый|17_0(ResourceInvoker героев, как Invoker, задания, задачи, метод IDisposable область)
Microsoft.AspNetCore.Маршрутизация.EndpointMiddleware.&ЛТ;вызвать&ГТ;г__AwaitRequestTask|6_0(конечная точка, конечная точка, requestTask задач, ILogger регистратор)
Microsoft.AspNetCore.Авторизация.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Диагностика.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Richard MacCutchan

Да, но какой ссылочный элемент является нулевым?

Todor Iliev

"модель", которая должна содержать элементы

Richard MacCutchan

Где вы инициализируете переменную модели?

Todor Iliev

Неважно, что я только что нашел свою проблему.Я действительно не знал, как работает структура папок в ASP.NET-да. Очевидно, у него было представление под названием "Индекс", первоначально инициализированное, поэтому он ссылался на неправильное представление.

ZurdoDev

Ошибка будет указывать на определенную строку кода. Это то, что вам нужно изучить, иначе мы просто догадываемся, что такое null.

Todor Iliev

Как я уже сказал, это происходит в цикле foreach в моем коде представления. Есть только один цикл по каждому элементу "@по каждому элементу (ВАР элемента в модель)" в строке 27, в частности, выхватывая из "модели".
Хир-это след, не знаю, поможет ли он:

NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
AspNetCore.Views_Home_Index.<executeasync>b__13_1() в Index.cshtml
-
Ladestand Fahrstrecke Startzeit Endzeit @foreach (var item in Model)
{
@пункту.ladestand @товар.fahrstrecke @item.startzeit @item.endzeitMicrosoft.AspNetCore.Razor.Время выполнения.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()
AspNetCore.Views_Home_Index.ExecuteAsync() в Index.cshtml
+
Видовой мешок.Title = "Индекс";
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(страница IRazorPage, контекст ViewContext)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(страница IRazorPage, контекст ViewContext, bool invokeViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(контекст ViewContext)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.В MVC.ViewFeatures.Вьюексектор.ExecuteAsync(ActionContext actionContext, вид руки, экземпляр класса viewdatadictionary viewData, данных tempdata ITempDataDictionary, строки "contentType", допускающий значение null и Л;int&ГТ; состояния)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(контекст ActionContext, результат ViewResult)
Microsoft.AspNetCore.В MVC.ViewResult.ExecuteResultAsync(контекст ActionContext)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokenextresultfilterasync&ГТ;г__ожидаемый|29_0&ЛТ;tfilter, tfilterasync=""&ГТ;(вызывающего ResourceInvoker, задач lastTask, государство, сферы охвата, состояние объекта типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Оператор(ResultExecutedContextSealed контексте)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.ResultNext&ЛТ;tfilter, tfilterasync=""&ГТ;(исх государства, объем Реф область, состояние объекта Реф, Реф типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokenextresourcefilter&ГТ;г__ожидаемый|24_0(вызывающего ResourceInvoker, задач lastTask, государство, сферы охвата, состояние объекта типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Оператор(ResourceExecutedContextSealed контексте)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.Следующий(государственный номер модели / ref рядом, сферу Реф область, состояние объекта Реф, Реф типа bool isCompleted)
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.В MVC.Инфраструктура.ResourceInvoker.&ЛТ;invokeasync&ГТ;г__ожидаемый|17_0(ResourceInvoker героев, как Invoker, задания, задачи, метод IDisposable область)
Microsoft.AspNetCore.Маршрутизация.EndpointMiddleware.&ЛТ;вызвать&ГТ;г__AwaitRequestTask|6_0(конечная точка, конечная точка, requestTask задач, ILogger регистратор)
Microsoft.AspNetCore.Авторизация.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Диагностика.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

ZurdoDev

Да, вы действительно сказали, что это происходит в цикле foreach, но в цикле есть 4 строки кода. Вам нужно отладить код и выяснить наверняка, что такое null. Если модель равна нулю, что кажется маловероятным, то вы, вероятно, неправильно настроили свои страницы. Убедитесь, что он вызывает метод контроллера, поместив в него также точку останова.

Todor Iliev

Модель выхватывая конкретно. Мой "BookingModel" находится в папке "модели", "BookingController" находится в папке "контроллеры" и мой "индекс" находится в папке "вид"

ZurdoDev

Поставьте точку останова, а затем проанализируйте, что такое null. Вы говорите, что это подсветка модели, но это не дает мне уверенности в том, что вы понимаете, как отлаживать, поэтому я не уверен, является ли модель нулевой или нет. И если модель действительно нулевая, то google для того, почему модель будет нулевой в представлении и посмотреть, что вы могли бы пропустить.

Todor Iliev

Итак, вы были правы.Я только что нашел свою проблему. Я действительно не знал, как работает структура папок в ASP.NET-да. Очевидно, у него было представление под названием "Индекс", первоначально инициализированное, поэтому он ссылался на неправильное представление.

ZurdoDev

Потрясающе, рад это слышать.

1 Ответов

Рейтинг:
12

ZurdoDev

Как уже упоминалось в комментариях, после проверки структуры сайта выяснилось, что существует индексное представление, вызывающее проблему.