На странице Razor я хочу изменить данные сущности. Данные загружаются в OnGet и сохраняются в OnPost. Данные, загруженные в OnGet, сохраняются в свойстве с именем Person
. Позже я могу просто получить их в OnPost (это идентичный объект).
Однако, если я использую обработчик, вызванный вызовом Ajax, объект свойства инициализируется (целочисленные свойства равны 0, свойства объекта равны нулю), но он больше не является исходным объектом.
Что мне нужно сделать, чтобы исходный объект также был доступен в обработчике, вызываемом вызовом Ajax?
Я уже пытался использовать атрибут [BindProperty] и использовать скрытый ввод на странице бритвы. Или для доступа ViewData.Model
Но это не работает. Person
и другие данные модели по-прежнему равны нулю.
Ajax-вызов:
function addEntitlement() {
var vacationEntitlement = {};
vacationEntitlement["Year"] = $('#newEntitlementYear').val();
vacationEntitlement["Days"] = $('#newEntitlementDays').val();
vacationEntitlement["PersonID"] = $('#hiddenPersonID').val();
$.ajax({
type: "POST",
url: "./Edit?handler=AddEntitlement",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(vacationEntitlement)
}).fail(function () {
alert('error');
}).done(function () {
});
}
PageModel:
public IActionResult OnGet(int? id)
{
if (id == null)
{
return NotFound();
}
Person = _unitOfWork.PersonRepository.GetByID(id);
if (Person == null)
{
return NotFound();
}
return Page();
}
public JsonResult OnPostAddEntitlement([FromBody] VacationEntitlement vacationEntitlement)
{
///Tried to acces Person or ViewData.Model.Person here.
///But Person is just intialized but does not contain the expected data.
}