#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