Почему мои функции JS не выполняются, если модель страницы заполнена данными? - PullRequest
0 голосов
/ 01 октября 2018

Я разрабатываю веб-приложение, используя ASP .NET Core 2.0

У меня есть частичное представление, которое содержит форму.

Затем у меня есть метод действия внутри контроллера, который выполняетсячерез функцию JS, которая использует AJAX.Этот метод действия заполняет модель и возвращает частичное представление формы и соответствующую модель.

Функция работает хорошо, пока модель не заполнена.Мне нужно получить запись из базы данных, когда определенное поле заполнено, а затем теряет фокус.Это работает впервые, когда используемая в форме модель пуста.Однако после первого нахождения записи и заполнения формы функция больше не выполняется.

Также проверки поля также не работают после загрузки записи.

Вот частичное представление формы:

<form id="myform">
        <div asp-validation-summary="All" class="text-danger"></div>
        <div class="form-group col-lg-2">
            <label asp-for="Client.Name">Client</label>
            <input asp-for="Client.Name" id="ClientName" />
        </div>
        <div class="form-group col-lg-1">
            <label asp-for="Cliente.Phone"></label>
            <input asp-for="Cliente.Phone" id="Phone"/>
        </div>
</form>

Функция JS / AJAX:

<script>
$("form").on("blur", "#Phone", function () {
    var phone = document.querySelector('#Phone').value;
    alert('select client by phone=' + phone);

    //Send the JSON array to Controller using AJAX.
    $.ajax({
        type: "POST",
        url: "/Home/GetClienteByPhone",
        data: "phone=" + phone,
        success: function (res) {
            $('#myform').html(res);
        }
    })
});
</script>

Наконец, метод действия контроллера (Controller = Home):

public IActionResult GetClienteByPhone(string phone)
    {
        if (!string.IsNullOrEmpty(phone))
        {
            var model = new FormViewModel();

            model.Client = _db.Clients.Where(c => c.Phone == phone).FirstOrDefault();

            return PartialView("_Form", model);
        }
        return PartialView("_Form");
    }

В моем представлении я отображаю частичное представление в div с id = "myform"

Кто-нибудь знает почему?

Спасибо

1 Ответ

0 голосов
/ 01 октября 2018

Кажется, вы заменяете всю свою форму в обратном вызове AJAX.Когда вы делаете это, вы также убиваете все прикрепленные обработчики событий.Если вам нужен обработчик событий для сохранения, вам необходимо делегировать его родительскому элементу, который остается на странице после замены.Вы используете функцию-обработчик делегата jQuery, но сам ваш делегат заменяется.Вам либо не нужно заменять всю форму и просто заменить какой-либо дочерний элемент внутри, либо использовать родительский элемент более высокого уровня, чем ваш form.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...