Как вы поймете, я относительный новичок в веб-программировании - переходя от веб-форм (ASPX), написанных на VB. Мой начальный проект разрабатывается в Visual Studio Code (последняя версия) в виде страниц Razor с использованием. Net Core 3.1, как я понял, теперь это самый простой способ. (Я избежал полной версии Visual Studio, поскольку это небольшой проект, я не могу попросить свою организацию заплатить за него, и Microsoft ясно, что версия Community не предназначена для использования в «Предприятиях», поскольку она определяет нас. Я закодировал в Basi c, Pascal и Perl, но я не инстинктивный программист. Мне кажется, что сложность веб-приложения возросла в десять раз с тех пор, как "Classi c ASP", и теперь требуется разделять элементы на View, Model и ViewModel.
Следуя примерам в Интернете, я ' у меня есть приложение для записи (начальных данных) и чтения из базы данных MySQL. Тем не менее, части зрения победили меня. Я пробовал различные примеры того, как создать и заполнить раскрывающийся список, но ни один из них не скомпилируется или не запустится для меня из-за отсутствующих элементов, даже после запуска «do tnet add package» и добавления ссылки на соответствующее пространство имен.
Хотя мое приложение должно работать только на Windows, я решил, что не хочу комбо-бокс, потому что он ресурсоемкий (мое приложение не будет компилироваться в любом случае даже после добавления необходимых ссылок и попытки перестроить . Я попал в путаницу с помощниками тегов и HTML помощниками и получил ряд различных ошибок. Я не пробовал примеры, в том числе «Viewbag», потому что не смог найти четкого описания того, что это такое, и по крайней мере один источник посоветовал не использовать его в любом случае.
Затем меня поразило, что я слишком усложняю вещи, потому что мое приложение успешно прочитало данные, необходимые в раскрывающемся списке, как показано на прилагаемом изображении. Это есть в модели (Home.cshtlml.cs) с использованием BookIt_Context.cs и сущностей, представляющих две таблицы здесь в P C .cs и Location.cs. Как показано на рисунке, мои образцы данных доступны и могут быть показаны в виде таблицы (для P C) и в виде простого текста для Location (список названий мест, расположенных вместе вверху). Однако, пытаясь показать другие выпадающие списки, другие методы давали ошибки, в которых говорилось, что «Имя» не было в Модели (хотя это явно так).
1008 * Теперь ошибки компиляции пошли, но выпадающий на участке упорно остается пустым. Кто-нибудь может сказать мне, почему? Требуется ли данным в Location (
publi c List Location {get; set;} = new List () ;) какой-то тип передачи, отображаемый в раскрывающемся списке? Извиняюсь, что пропустил что-то простое, но просто не вижу его.
Снимок экрана @page
@model HomeModel // Definition of this lives in the corresponding .cs file
@{
ViewData["Title"]="BookIt Home";
}
<section id="main">
@foreach(var loc in Model.Location) { @loc.Name }
<br>
<select name="OurLoc" id="OurLocBox">
@foreach(var loc in Model.Location) { <option value="@loc.Name"></option> }
</select>
<table border="1" cellspacing="10" cellpadding="10">
<tr> <!-- Header row -->
<td><p><b>PC Name</b></p></td><td><p><b>Location</b></p></td><td><p><b>Workstn Name</b></p></td>
</tr>
@foreach(var pc in Model.PC)
{
<tr>
<td><p>@pc.FriendlyName</p></td> <td><p>@pc.LocationID</p></td> <td><p>@pc.NetBIOSName</p></td>
</tr>
}
</table>
</section>
Home.cs html .cs:
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Pomelo.EntityFrameworkCore.MySql;
using Microsoft.AspNetCore.Mvc.RazorPages;
using BookIt.Data;
using BookIt.Models;
namespace BookIt.Pages
{
public class HomeModel : PageModel
{
private readonly BookIt_Context db;
public HomeModel(BookIt_Context db) => this.db = db;
public List<PC> PC {get; set; } = new List<PC>();
public List<Location> Location {get; set; } = new List<Location>();
public async Task OnGetAsync()
{
PC = await db.PC.ToListAsync();
Location = await db.Location.ToListAsync();
}
}
}