Core 2.0 MVC taghelper генерирует ссылки без href

Я новичок в платформе Core 2.0 (но не в MVC) и расширяю демонстрационный проект ContosoUniversity, чтобы включить в него некоторые требуемые функциональные возможности, чтобы увидеть, будет ли это путь для готовящегося приложения, которое я собираюсь создать. Одна из этих вещей - Области.

Вместо того, чтобы иметь демонстрационный контроллер "ученики", модели и представления в их папках по умолчанию, я создал область "Образование" и поместил StudentController в его папку "Контроллеры", модели в папке "Модели", а затем использовал Scaffolding для создания представлений. там: Структура папок Области

Метод Configure в Startup.cs был изменен для маршрутизации области настройки:

// Map static routes
        app.UseStaticFiles();

        // Map MVC routing
        app.UseMvc(routes =>
        {
            // Area routes
            routes.MapRoute(
              name: "areas",
              template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
            );

            // Default MVC routing
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

При тестировании приложения оно загружается нормально, и я могу просмотреть страницу /Education/Students, как и ожидалось. Однако при проверке ссылок CRUD, генерируемых платформой, они, по-видимому, не имеют свойства HREF и, как таковые, не работают. Когда я изменяю его на ActionLink, он работает, однако:

@Html.ActionLink("Edit 1", "Edit", "Students", new { area = "Education", id = item.ID }, null) // works
                <a asp-action="Edit" asp-area="Education" asp-route-id="@item.ID">Edit 1</a> // does not work

Ссылка, сгенерированная действием, является http://localhost:61541/Education/Students/Edit?id=1.

Тем не менее, чтобы заставить это работать, мне пришлось изменить контроллер, включив в него декораторы маршрутизации, что, из примеров, не должно было быть необходимым, если я правильно понял учебник, потому что текущая Область должна быть привязана к ссылкам. С этим может быть связана основная проблема, но я не могу понять это как-то. Контроллер, индексное действие и действие редактирования:

    namespace ContosoUniversity.Areas.Education
{
    [Area("Education")]
    [Route("Education/[controller]")]
    public class StudentsController : Controller
    {
        private readonly EducationContext _context;

        public StudentsController(EducationContext context)
        {
            _context = context;
        }

        // GET: Education/Students        
        public async Task<IActionResult> Index()
        {
            return View(await _context.Students.ToListAsync());
        }

        // GET: Education/Students/Edit/5
        [Route("[action]")]
        public async Task<IActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var student = await _context.Students.SingleOrDefaultAsync(m => m.ID == id);
            if (student == null)
            {
                return NotFound();
            }
            return View(student);
        }

Итак, мои вопросы:

  1. Как я могу заставить taghelpers генерировать правильные ссылки, и
  2. Я что-то выдумал, когда ActionLinks вообще нужны все виды маршрутизации?

Редактировать: переход к URL-адресу редактирования с помощью ссылки на действие приводит к появлению пустой формы. Модель правильно заполнена в контроллере и возвращает правильный вид, но без заполнения полей с использованием сгенерированного кода:

<input asp-for="LastName" class="form-control" />

Однако, если я добавлю @Model.LastName в HTML, я увижу правильное имя. Что мне не хватает? Каким-то образом модель не связывается правильно?:(

0 ответов

Другие вопросы по тегам