Программист-любитель возвращается сюда с еще несколькими глупыми вопросами для вас, замечательные люди. Пожалуйста, извините за невежество с моей стороны, когда вы просматриваете мой код, он, вероятно, не так чист, как некоторые из вас, профессионалы, хотели бы, чтобы это было.
Я делаю все возможное, чтобы следовать за удивительным мистером Скоттом Алленом ASP. Net основные руководства на веб-странице Pluralsight. Однажды я успешно прошел через него, и теперь снова прошёл через него, адаптируя его под приложение, которое я хотел создать. Я застрял на части курса (module6, video6), где страница бритвы, содержащая некоторые данные SQL в базовой таблице c HTML, изменена, чтобы перечислить каждую запись БД в качестве частичного представления. Для этого в FOREACH l oop используется вспомогательный тег HTML, которому в качестве параметров передается частичное имя макета и модель. На каждой итерации каждая отдельная запись в БД отображается в своем частичном представлении в главном представлении. Проблема, с которой я сталкиваюсь при запуске приложения, заключается в том, что при загрузке главной страницы и достижении foreach l oop на самой первой итерации происходит сбой и выдается ошибка «Необработанное исключение». Ниже я приложил все усилия, чтобы включить все фрагменты кода, которые вам, ребята, нужно будет проанализировать, но еще раз извините за мое невежество, если чего-то не хватает. Пожалуйста, дайте мне знать, если есть, и я включу его сразу.
MAIN VIEW-List.cs html:
@page
@model ListModel
@{
ViewData["Title"] = "Containers";
}
<h1>Containers</h1>
<form method="get">
<div class="form-group">
<div class="input-group">
<input type="search" class="form-control"
asp-for="SearchTerm" />
<span class="input-group-btn">
<button class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>
</button>
</span>
</div>
</div>
</form>
@foreach (var container in Model.Containers)
{
<partial name="_Summary" @model="container"/>
}
<a asp-page="./Edit" class="btn btn-primary"> Add New</a>
@section footer {
<div>@Model.Message</div>
}
MAINVIEW-List.cs html .cs :
namespace FreightPush.Pages.Containers
{
public class ListModel : PageModel
{
private readonly IConfiguration config;
private readonly IContainerData containerData;
public string Message { get; set; }
public IEnumerable<Container> Containers { get; set; }
[BindProperty(SupportsGet = true)]
public string SearchTerm { get; set; }
public ListModel(IConfiguration config, IContainerData containerData)
{
this.config = config;
this.containerData = containerData;
}
public void OnGet()
{
Message = config["Message"];
Containers = containerData.GetContainersByNumber(SearchTerm);
}
}
}
PARTIALVIEW-_Summary.cs html:
@using FreightPush.Core
@model Container
<div class="card">
<div class="panel-heading">
<h3>Container Number: @Model.Number</h3>
</div>
<div class="card-body">
<span>Container Type: @Model.ContainerType</span>
<span>Client: @Model.Client</span>
</div>
<div class="card-footer">
<a class="btn btn-lg"
asp-page="./Detail"
asp-route-containerId="@Model.Id">
<i class="fa fa-search-plus"></i>
</a>
<a class="btn btn-lg"
asp-page="./Edit"
asp-route-containerId="@Model.Id">
<i class="fa fa-edit"></i>
</a>
<a class="btn btn-lg"
asp-page="./Delete"
asp-route-containerId="@Model.Id">
<i class="fa fa-trash"></i>
</a>
</div>
</div>
Ошибка, которую я получаю при первом итере FOREACH l oop внутри list.cs html:
InvalidOperationException: элемент модели, передаваемый в ViewDataDictionary, имеет тип 'FreightPu sh .Pages.Containers.ListModel', но для этого экземпляра ViewDataDictionary требуется элемент модели из введите 'FreightPu sh .Core.Container'.
Вот то, что я знаю до сих пор, основываясь на некоторых очень обширных исследованиях inte rnet по этому вопросу:
- Я могу подтвердить, что я НЕ устанавливаю модель на своей странице _layout.
- Я знаю, что Контейнеры - это IENumerable и что модель моей _Summary-страницы - это один Контейнер, и я видел, как несколько человек на онлайн-форумах указывали, что это самая распространенная ошибка. ОДНАКО, разве это не цель foreach l oop и его объявленный переменный контейнер? На моем интерактивном отладчике контейнер работает отлично, и все соответствующие поля заполняются из моей SQL БД.
- Если я правильно понял то, что я исследовал, то из того, что я понял, реальный виновник заключается в том, что viewdatadictionary разделен между представлениями. Однако я не могу найти нигде в inte rnet, который показывает мне правильный синтаксис для передачи данных вида в качестве параметра, и intellisense не помогает. Можно ли вообще исправить проблему с параметром view-data?
Большое спасибо, ребята, за вашу помощь! Этот веб-сайт делает мир лучше для одного инженера-любителя за раз!