Я хочу создать веб-сайт со страницами Razor, чтобы сохранить пространство и соответствующие комнаты.
Итак, в моей модели пространство имеет список комнат.
public class Space
{
public int Id { get; set; }
public string SpaceName { get; set; }
public List<Room> Rooms { get; set; }
public Space()
{
this.Rooms = new List<Room>();
}
}
В create.cshtml я хочу динамически добавлять и удалять комнаты
<h1>Create New Space</h1>
<form method="post">
<div class="form-group">
<label for="Space.SpaceName">Space Name</label>
<input type="text" class="form-control" asp-for="Space.SpaceName" placeholder="Enter space name">
<span asp-validation-for="Space.SpaceName" ></span>
</div>
@if(Model.Space != null){
for (int i = 0; i < Model.Space.Rooms.Count; i++)
{
<input asp-for="@i" type="hidden" />
<div class="form-group">
<label for="SpaceName">Room Name</label>
<input type="text" class="form-control" asp-for="Space.Rooms[i].Name" placeholder="Enter space name">
<span asp-validation-for="Space.Rooms[i].Name" ></span>
</div>
<button type="submit" asp-page-handler="removeroom" asp-route-index="@i">Remove Room</button>
}
}
<button type="submit" asp-page-handler="addroom">Add Room</button>
<button type="submit" asp-page-handler="submit" class="btn btn-primary">Submit</button>
</form>
PageModel выглядит так:
public class CreateModel : PageModel
{
readonly SpaceRepository spaceRepository;
public CreateModel(SpaceRepository spaceRepository)
{
this.spaceRepository = spaceRepository;
}
[BindProperty]
public Space Space { get; set; }
public async Task<IActionResult> OnPostSubmitAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
spaceRepository.Create(Space);
return RedirectToPage("./Index");
}
public async Task OnPostAddRoomAsync()
{
Space.Rooms.Add(new Room());
}
public async Task OnPostRemoveRoomAsync(int index)
{
Space.Rooms.RemoveAt(index);
}
}
Пока все работает как положено, но когда я создаю, например, 3 комнаты и удаляю первую или вторую, всегда удаляется последняя.
Кажется, что страница не получает манипулируемый список после сообщения обработчика.
Есть идеи, чего не хватает?
Спасибо за помощь!