Razor Pages AJAX - заполнение модели после вызова вызова AJAX - PullRequest
0 голосов
/ 08 марта 2019

Я новичок в 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>
...