Код AJAX MVC 5 не обращается к стороне сервера действий контроллера класса - PullRequest
0 голосов
/ 12 февраля 2019

Назначение кода: Назначение этого кода - принимать данные, передаваемые ему через область действия, и помещать в массив для передачи контроллеру входа (серверу).Сторона) через AJAX.

Проблема Код AJAX не выглядит так, как будто он успешно связывается с действием на стороне сервера.

  1. Я попытался переместить действие с контроллера входа в систему на домашний контроллер: Безуспешно.
  2. Я попытался выполнитьрекомендации тех, кто ранее сталкивался с этой проблемой: Безуспешно.
  3. Я попытался жестко запрограммировать URL-адрес действия: Безуспешно.

Ниже приведен вызов AJAX:

    login: function (username, password) {
                var cred = { "uname": username, "pass": password };
                var response = $http({
                    method: "POST",
                    url: '@(Url.Action("CheckUser","Login"))',
                    data: JSON.stringify({ model: cred }),
                    contentType: 'application/json; charset=utf-8',
                    dataType: "JSON",
                    success: function (msg) {
                        if (msg) {
                            console.log("success: " + msg);
                        }
                    },
                    error: function (msg) {
                        if (msg) {
                            console.log("Error:" + msg);
                        }
                    },
                    failure: function (msg) {
                        if (msg) {
                            console.log("fail: " + msg);
                        }
                    }
                });

Следующий код действия:

     namespace test4.Controllers
{
    public class LoginController : Controller
    {
        // GET: Login
        public ActionResult Login()
        {
            return View();
        }

        public class UserCred
        {
            public string Uname { get; set; }
            public string Pass { get; set; }  
        }
        [HttpPost]
        public ActionResult CheckUser(UserCred umodel) 
        {
            Console.WriteLine("I am here");
            if (!ModelState.IsValid)
            {
                return Content("0");
            }

            string uname = umodel.Uname;
            string pword = umodel.Pass;

            using (localtestEntities entity = new localtestEntities()) {
                var user = entity.users.Where(u => u.uname == uname).FirstOrDefault();
                if (user != null) {
                    if (pword == user.pw) {
                        Session["LoginID"] = user.id;
                        Session["Username"] = user.fname + ' ' + user.lname;
                        return Content(user.id.ToString());
                    } else {
                        return Content("0");
                    }
                } else {
                    return Content("0");
                }
            }
            /* Begin Assigning values */
        } //End Check User
    }
}

Предполагаемый результат - передачавернемся к коду на стороне клиента, соответствует ли проведенное сравнение строк и содержанию в базе данных.

1 Ответ

0 голосов
/ 12 февраля 2019

Пара вещей:

  1. $Http({... не является действительной функцией AJAX.Я бы рекомендовал использовать $.post() для [HttpPost] и $.get() для [HttpGet].Вы можете просмотреть это подробно из документации jQuery здесь: https://api.jquery.com/jquery.post/

  2. Этот URL не будет работать.Вы не можете получить доступ к вспомогательным методам в JS.Таким образом, вы буквально передаете @(Url.Action("CheckUser","Login")) в свой URL, чтобы он выглядел примерно как localhost:3000/@(Url.Action("CheckUser","Login")), что, очевидно, не является допустимым маршрутом.Вам нужно будет получить этот URL для вашей функции ajax другим способом.Некоторые параметры:

1) В заголовке вашего .cshtml файла сделайте что-то вроде:

    <script>
        $(() => {
            const url = `@Url.Action("CheckUser","Login")`;

            //Pass that into your JS code via a constructor parameter if your JS 
            //is a class or by function parameter if your JS code is a function.
            const myJSClassNameHere = new myJSClassHere(url);
        });
    </script>

2) вы можете просто жестко кодировать URL ввызов Аякса.Это жизнеспособный вариант, если вы не ожидаете изменения URL-адреса и / или если ваши стандарты это позволяют.

...