Почему модель возвращает нулевое исключение при его использовании в моем файле Index.cshtml? При запуске информация не отображается

#c# #asp.net-core-mvc

Вопрос:

Я использую сообщество Visual Studio 2019, ASP.NET Основное веб-приложение (Модель-Представление-контроллер) с последней версией .NET.

У меня возникла проблема, из-за которой данные, которые я извлекаю из базы данных, к которой я подключился, не будут отображаться на веб-странице при запуске программы. Я также получаю нулевое исключение, когда не добавляю «?? Поддается перечислению.Условие » Пусто()» для цикла foreach, который я пытался создать с помощью модели. Я включу модель, Данные, Контроллеры, файл index.cshtml.

Файл модели:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks;   namespace Northwind_API.Models {  public class ProductInfo  {  [Key]  public Guid product_id { get; set; }  public string product_name { get; set; }  public int supplier_id { get; set; }   public int category_id { get; set; }  public string quantity_per_unit { get; set; }   public double unit_price { get; set; }   public int units_in_stock { get; set; }   public int units_on_order { get; set; }   public int reorder_level { get; set; }   public int discontinued { get; set; }  } }   

Файл данных:

 using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;  using Northwind_API.Models;  namespace Northwind_API.Data {  public class DataContext : DbContext  {   public DataContext(DbContextOptions options) : base(options)  {  }   public DbSetlt;ProductInfogt; Info { get; set; }  } }   

Контроллер:

 using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Northwind_API.Data; using Northwind_API.Models;  namespace Northwind_API.Controllers {   public class ValuesController : Controller  {  public readonly ILoggerlt;ValuesControllergt; _logger;  public readonly DataContext _context;    public ValuesController(ILoggerlt;ValuesControllergt; logger, DataContext context)  {  _logger = logger;  _context = context;  }    public IActionResult Index()  {  return View(_context.Info.ToList());  }     } }  

Index.cshtml file:

  @using Northwind_API.Models; @using System.ComponentModel.DataAnnotations;   @{  ViewBag.Title = "Home Page"; }  lt;div class="row"gt;lt;pgt;lt;h2gt;Category Namelt;/h2gt;lt;/pgt;lt;/divgt;  lt;div class="row"gt;   lt;div class="col-md-12"gt;  lt;div class="table- responsive"gt;  lt;table class="table table-striped custom table mb-0"gt;  lt;theadgt;  lt;trgt;  lt;thgt;Product IDlt;/thgt;   lt;thgt;Product Namelt;/thgt;  lt;thgt;Supplier IDlt;/thgt;  lt;thgt;Category IDlt;/thgt;  lt;thgt;Unit Pricelt;/thgt;  lt;thgt;Units in stocklt;/thgt;  lt;thgt;Units on orderlt;/thgt;  lt;thgt;Reorder levellt;/thgt;  lt;thgt;Discontinuedlt;/thgt;   lt;/theadgt;  lt;tbodygt;   @foreach (var item in Model ?? Enumerable.Emptylt;stringgt;())  {  lt;trgt;  lt;tdgt;@item.product_idlt;/tdgt;  lt;tdgt;@item.product_namelt;/tdgt;  lt;tdgt;@item.supplier_idlt;/tdgt;  lt;tdgt;@item.category_idlt;/tdgt;  lt;tdgt;@item.unit_pricelt;/tdgt;  lt;tdgt;@item.units_in_stocklt;/tdgt;  lt;tdgt;@item.units_on_orderlt;/tdgt;  lt;tdgt;@item.reorder_levellt;/tdgt;  lt;tdgt;@item.discontinuedlt;/tdgt;  lt;/trgt;   }   lt;/tbodygt;  lt;/tablegt;   lt;/divgt;  lt;/divgt;  lt;/divgt;  

Мы будем очень признательны за любую помощь.

Правка: Я добавил изображение карты таблиц в предоставленную мне базу данных. Изображение таблиц базы данных

Комментарии:

1. Привет @to_Bewilder, какова версия вашего asp.net ядро? На самом деле я протестировал ваш код, и если в нем нет никаких данных в базе данных, он также работает без каких-либо исключений, независимо от того, используете ли вы ?? или нет.

2. .NET Core 3.1 LTS. В базе данных должны быть данные, потому что мне нужно было использовать строку подключения для подключения к базе данных. Все это часть проекта, порученного мне, поэтому я должен иметь возможность использовать информацию, указанную в моих переменных.

Ответ №1:

вам нужно добавить модель в представление индекса

 @model Listlt;ProductInfogt; ....  @if (@Model!=null amp;amp; @Model.Count gt; 0) {  @foreach (var item in Model)  {  lt;trgt;  lt;tdgt;@item.product_idlt;/tdgt;  lt;tdgt;@item.product_namelt;/tdgt;  lt;tdgt;@item.supplier_idlt;/tdgt;  lt;tdgt;@item.category_idlt;/tdgt;  lt;tdgt;@item.unit_pricelt;/tdgt;  lt;tdgt;@item.units_in_stocklt;/tdgt;  lt;tdgt;@item.units_on_orderlt;/tdgt;  lt;tdgt;@item.reorder_levellt;/tdgt;  lt;tdgt;@item.discontinuedlt;/tdgt;  lt;/trgt;  } }  

Обновить

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

 [Table("Products")]  public class ProductInfo  

Комментарии:

1. Извините, все еще ничего.

2. @to_Bewilder извините, что ничего не значит?

3. Я перешел на код по вашей рекомендации, и страница, которую я создал, по-прежнему не отображает необходимую мне информацию.

4. @to_Bewilder Почему он должен отображаться, если в вашей базе данных нет никаких данных или ваша база данных неправильно сконфигурирована?

5. Я настроил его в своем файле appsettings.json как «Строки подключения»: { «Подключение по умолчанию»: «Сервер=166.230.5.22;База данных=Северный ветер;Информация о безопасности=True;Идентификатор пользователя={Заявитель};Пароль={RelaxAndGoodLuck!}»», а затем я ссылаюсь на него в своем файле datacontext.cs