Я новичок в AJAX и пытаюсь удалить строку в таблице, не обновляя всю страницу.Когда кнопка нажата, строка успешно удаляется из базы данных, но я получаю эту ошибку:
NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
Смысл Модель пуста.Я не понимаю, как я должен заполнить модель снова после вызова AJAX.
Кто-нибудь имел дело с этим раньше?
Мой класс модели:
public class Person
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public string PersonAddress { get; set; }
}
Мой Index.cshtml.cs:
[ValidateAntiForgeryToken]
public class IndexModel : PageModel
{
private readonly WebApplication20.Data.ApplicationDbContext _context;
public IndexModel(WebApplication20.Data.ApplicationDbContext context)
{
_context = context;
}
public IList<Models.Person> Person { get;set; }
public async Task OnGetAsync()
{
Person = await _context.Person.ToListAsync();
}
public IActionResult OnPostDeleteById(int id)
{
var pers = _context.Person.Find(id);
_context.Remove(pers);
_context.SaveChanges();
Person = _context.Person.ToList();
return new JsonResult
("Customer Deleted Successfully!");
}
}
Мой индекс.cshtml:
@page
@model WebApplication20.Pages.Person.IndexModel
<p>
<a asp-page="Create">Create New</a>
</p>
<div id="msg"></div>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Person[0].PersonName)
</th>
<th>
@Html.DisplayNameFor(model => model.Person[0].PersonAddress)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Person)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.PersonName)
</td>
<td>
@Html.DisplayFor(modelItem => item.PersonAddress)
</td>
<td>
<form method="post">
<button class="btn btn-danger" onclick="DeleteId('@item.PersonId');">Delete</button>
</form>
</td>
</tr>
}
</tbody>
</table>
Javascript (вставка в тег script
внизу страницы)
<script>
function DeleteId(id) {
var options = {};
options.url = "/Person/Index?handler=DeleteById&id=" + id;
options.beforeSend = function(xhr) {
xhr.setRequestHeader("MY-XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
};
options.dataType = "json";
options.type = "POST";
options.success = function (data) {
$("#msg").html("Great Success");
};
options.error = function () {
$("#msg").html("Error something went wrong");
};
$.ajax(options);
}
</script>