Я новичок в .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.
Что я делаю не так?





По умолчанию 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 Где бы вы использовали это включение?
Я обновил ответ, чтобы, надеюсь, сделать его более понятным.
Другой вариант — сделать Apartment обнуляемым. Изменение: публичная квартира Квартира { get; набор; } Кому: публичная квартира? Квартира {получить; набор; } = ноль!;
Это работает, я не могу в это поверить... Спасибо. Я боялся, что это вызовет проблемы с привязкой, но посмотрим, вызовет ли это какие-либо проблемы позже.
Привет @user23921920, как тебе вид бритвы?