Ale*_*nko 5 c# asp.net-core razor-pages
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");
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试发布错误的图像时,!ModelState.IsValid yields true 和 Page() 调用。我得到
NullReferenceException: Object reference not set to an instance of an object.的Model.ItemModel.Categories地方Categories是serveral的选择列表由_itemService.GetCreateViewModel从数据库正常下载()中的一个。我不明白发生了什么Page()。为什么不使用表单中的旧数据?如何asp-validation-for重新呈现带有验证错误的页面(我在 cshtml 中有)?我试过了this.ItemModel = itemModel,我不再得到 Null 引用,但没有看到任何验证错误,并且以前的选择列表值未保存。
return Page与return View()在普通 MVC 控制器操作中调用相同。
当提交的表单有验证错误(传递给服务器)时,
OnPostAsync处理程序方法调用Page辅助方法。Page返回 的一个实例PageResult。返回Page类似于控制器中的操作返回的方式View。PageResult是处理程序方法的默认返回类型。返回void呈现页面的处理程序方法。
更新页面模型属性以允许视图绑定到模型。
public class CreateModel : PageModel {
private readonly IItemService _itemService;
public CreateModel(IItemService itemService) {
_itemService = itemService;
}
[BindProperty]
public ItemCreateViewModel ItemModel { get; set; }
// all related data downloaded from db, so all rendered correctly
public async Task<IActionResult> OnGetAsync() {
ItemModel = await _itemService.GetCreateViewModel();
return Page();
}
public async Task<IActionResult> OnPostAsync() {
if (!ModelState.IsValid) {
return Page();
}
var item = _itemService.CreateItem(ItemModel);
var image = await ImagesController.ProcessFormImage(ItemModel.ImageUpload.UploadPhoto, item.Id, ModelState);
if (!ModelState.IsValid) {
return Page();
}
await _itemService.SaveItemImage(image);
_itemService.CreateItem(ItemModel);
return RedirectToPage("./Index");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5942 次 |
| 最近记录: |