Функция jQuery не вызывается в событии с измененным текстом mvc - PullRequest
0 голосов
/ 27 ноября 2018

Я получаю это странное поведение в jQuery при работе с приложением mvc.

Ниже приведено представление MVC, в котором я реализовал событие изменения текста,

 @Html.TextBoxFor(m => m.UserId, new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.UserId, "", new { @class = "text-danger" })

enter image description here

    $("#UserId").change(function () {
        var UserId = $(this).val();
        //$("#txtName").val(emailId);
        $.ajax({
            url: 'GetValidUserName',
            type: 'POST',
            data: JSON.stringify({ UserId: UserId }),
            dataType: 'json',
            contentType: 'application/json',
            success: function (data) {
                if (!$.trim(data)) {
                    alert("User does not exist in system. Please enter valid User Id.");
                    $(':input[type="submit"]').prop('disabled', true);
                }
                else {
                    $("#UserId").val(data);
                    $("#UserId").focus();
                    $(':input[type="submit"]').prop('disabled', false);
                }
            }
        });
    });

При отладке приложения при первой загрузке представления индекса, вызывается функция jQuery и корректно вызывается действие контроллера. http://localhost:51012/UserApplication/Index

Но когда я загружаюснова, функция jQuery не вызывается.

Код контроллера,

 public JsonResult GetValidUserName(string userId)
    {
        LMTUsage objLMT = new LMTUsage();
        LMTDAL objLMTDAL = new LMTDAL();

        string UserID = "";

        objLMT.UserList = objLMTDAL.GetAll_User("", 0, "6");

        var AllUsersInDatabase = from p in objLMT.UserList
                                 where p.UserId == userId
                                 select new
                                 {
                                     Name = p.UserName,
                                     Id = p.UserId,
                                 };

        foreach (var user in AllUsersInDatabase)
        {
            if (user.Name != null)
            {
                UserID = user.Id;
            }
        }
        return Json(UserID, JsonRequestBehavior.AllowGet);
    }

1 Ответ

0 голосов
/ 27 ноября 2018

У вас есть несколько проблем с обратным вызовом AJAX:

1) type: 'POST' опция требует атрибута [HttpPost].Если атрибут отсутствует в методе действия, используйте type: 'GET'.

2) Вам не нужно JSON.stringify() для передачи одного параметра, содержащего простые типы (числовые и строковые значения).Простое { userId: UserId } должно подойти.

3) Имя параметра действия контроллера должно точно совпадать с именем параметра, отправленным из обратного вызова AJAX.

Следовательно, ваш обратный вызов AJAX должен следовать приведенному ниже примеру.:

$(function () {
    $("#UserId").change(function () {
        var UserId = $(this).val();

        $.ajax({
            url: '@Url.Action("GetValidUserName", "ControllerName")',
            type: 'GET',
            data: { userId: UserId },
            dataType: 'json',
            success: function (data) {
                if (!$.trim(data)) {
                    alert("User does not exist in system. Please enter valid User Id.");
                    $(':input[type="submit"]').prop('disabled', true);
                }
                else {
                    $("#UserId").val(data);
                    $("#UserId").focus();
                    $(':input[type="submit"]').prop('disabled', false);
                }
            }
        });
    });
});
...