ASP NET CORE 2 У меня следующий код модели страницы
public class CreateModel : PageModel
{
private readonly IItemService _itemService;
public ItemCreateViewModel ItemModel { get; set; }
public CreateModel(IItemService itemService)
{
_itemService = itemService;
}
// all related data downloaded from db, so all rendered correctly
public async Task OnGet(ItemCreateViewModel itemModel)
{
ItemModel = await _itemService.GetCreateViewModel();
}
public async Task<IActionResult> OnPost(ItemCreateViewModel itemModel)
{
if (!ModelState.IsValid)
{
return Page();
}
var item = _itemService.CreateItem(itemModel);
var image = await ImagesController.ProcessFormImage(itemModel.ImageUpload.UploadPhoto, item.Id, ModelState);
if (!ModelState.IsValid)
{
//trouble is somewhere here
return Page();
}
await _itemService.SaveItemImage(image);
_itemService.CreateItem(itemModel);
return RedirectToPage("./Index");
}
}
Когда я пытаюсь опубликовать неправильное изображение,! ModelState.IsValid возвращает true и вызывается Page ().Я получаю NullReferenceException: Object reference not set to an instance of an object.
в Model.ItemModel.Categories
, где Categories
- это один из нескольких списков выбора, обычно загружаемых из базы данных _itemService.GetCreateViewModel ().Я не понимаю, что происходит на Page()
.Почему не используются старые данные из формы?Как я могу перерисовать страницу с ошибками проверки (у меня asp-validation-for
в cshtml)?Я попытался this.ItemModel = itemModel
, и я больше не получаю нулевую ссылку, но не вижу ошибок валидации, а предыдущие списки выбора не сохранили значения.