Форма создания шаблона Visual Studio не работает в ASP.NET Core 8 MVC

Я новичок в .NET Core и работаю над мини-проектом — веб-сайтом для бронирования квартир.

Я уже создал свои модели данных и таблицы данных для сайта. Когда я создаю новый контроллер с представлениями Razor, форма создания просто не работает, если в таблице есть внешний ключ.

Базовое создание простых таблиц работает. Я все перепробовал, отдал Что я делаю не так?

Есть 2 таблицы данных Apartments и Bookings. Вот два класса данных, которые необходимы в форме (они наследуют ID от BaseEntity):

using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace Vendeghazak.Data
{
    public class Booking : BaseEntity
    {
        public int GuestID { get; set; }
        public DateTime CheckInDate { get; set; }
        public DateTime CheckOutDate { get; set; }
        public string? Comment { get; set; }
        public string? Status { get; set; }
        public bool Cancelled { get; set; }
        
        [ForeignKey("ApartmentId")]
        public int ApartmentId { get; set; }
        public Apartment Apartment { get; set; }
        
        public int NumberOfPersons { get; set; }
        public int PersonsUnder18 { get; set; }
        public string BillingAddress { get; set; }
        public string BillingEmail { get; set;}
    }

    public class Apartment : BaseEntity
    {
        public string Name { get; set; }
        public int Capacity { get; set; }
    }

    public partial class BaseEntity
    {
        public int Id { get; set; }
        public DateTime DateCreated { get; set; }
        public DateTime DateModified { get; set; }
    }
}

Я попытался удалить Id из аннотации внешнего ключа, но это не помогло. Когда я отправляю форму, подраздел Apartments всегда имеет значение null, и из-за этого ModelState недействителен. Существует раскрывающийся список квартир, и я попробовал разные методы, чтобы правильно его заполнить, но безуспешно.

Я также пробовал жестко закодировать значение идентификатора квартиры в представлении, а затем вручную назначить его в контроллере, но после отправки подраздел Apartments всегда имеет значение null.

Что я делаю не так?

Привет @user23921920, как тебе вид бритвы?

Rena 01.04.2024 03:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию LINQ не загружает таблицу «Апартаменты» при получении данных «Бронирования».

Добавьте следующее в оператор LINQ, который загружает Booking.

context.Booking
.Include(x => x.Apartment)
.FirstOrDefaultAsync();

Привет! Спасибо за ответ. Извините, если я неправильно понял это, но я хочу, чтобы форма «Создать» работала. Есть элемент «Новый список выбора», в который будут включены квартиры: new BookingCreateVM { Apartments = new SelectList(_context.Apartments, «Id», «Name») }; При действии POST это тоже происходит. Когда я отправляю форму, все действительно, кроме «Квартиры». Вот скриншот: i.ibb.co/K7sMv17/Screenshot-2024-04-01-165229.png Где бы вы использовали это включение?

user23921920 01.04.2024 16:53

Я обновил ответ, чтобы, надеюсь, сделать его более понятным.

Troy Turley 01.04.2024 17:11

Другой вариант — сделать Apartment обнуляемым. Изменение: публичная квартира Квартира { get; набор; } Кому: публичная квартира? Квартира {получить; набор; } = ноль!;

Troy Turley 01.04.2024 17:18

Это работает, я не могу в это поверить... Спасибо. Я боялся, что это вызовет проблемы с привязкой, но посмотрим, вызовет ли это какие-либо проблемы позже.

user23921920 01.04.2024 17:57

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