Я пытаюсь создать форму для обновления пустот в модели.
Приведенный ниже код работает и правильно заполняет поля текущими полями, но OnPostUpdateDataAsync () завершается ошибкой с исключением нулевого объекта (AnПроизошло необработанное исключение при обработке запроса.).
<div id="edit-ticket" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog-700" role="document">
<div class="modal-content modal-size">
<div class="modal-header">
<h6 class="modal-title">Edit</h6>
</div>
<div class="modal-body">
<div class="container">
<div class="row justify-content-md-center">
<form asp-page-handler="updateData" method="post">
<input type="hidden" name="id" value="@Model.MyView.Id" />
<div class="form-group">
<label asp-for="MyView.PhoneNumber" class="control-label">Contact Phone Number</label>
<input asp-for="MyView.PhoneNumber" class="form-control" />
<span asp-validation-for="MyView.PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="MyView.Email" class="control-label">Contact Email</label>
<input asp-for="MyView.Email" class="form-control" />
<span asp-validation-for="MyView.Email" class="text-danger"></span>
</div>
<div class="form-group">
<button class="btn">
<span class="text">Update</span>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
Приведенный ниже метод мгновенно завершается с ошибкой нулевой ссылки на объект для MyView:
[BindProperty]
public MyDisplayViewModel MyView { get; set; }
public void OnGet()
{
var data = m.GetData(_context, ID);
MyView = new MyViewModel(data);
}
public async Task<IActionResult> OnPostUpdateDataAsync(int id)
{
var ticket = _context.Ticket.Include(x => x.Support).First(x => x.id == id);
ticket.Support.PhoneNumber = MyView.PhoneNumber;
ticket.Support.Email = MyView.Email;
try
{
await _context.SaveChangesAsync();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
return RedirectToPage(new { ID });
}
Alternive не выдает ошибку, но также не заполняет поля полямитекущие данные:
public async Task<IActionResult> OnPostUpdateDataAsync(int id, string phoneNumber, string email)
{
var ticket = _context.Ticket.Include(x => x.Support).First(x => x.id == id);
ticket.Support.PhoneNumber = phoneNumber;
ticket.Support.Email = email;
try
{
await _context.SaveChangesAsync();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
return RedirectToPage(new { ID });
}
Я уже использовал связанные свойства, поэтому я не знаю, что отличается.