MVC 5 AJAX 代码未访问控制器 Class 操作服务器端

MVC 5 AJAX Code is not accessing Controller Class Action Server Side

代码的用意: 这段代码的目的是接受通过作用域传递给它的数据,并将数据放在一个数组中,通过 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. $Http({... 不是实际的 ajax 函数。我建议对 [HttpPost] 使用 $.post(),对 [HttpGet] 使用 $.get()。您可以在此处从 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 文件的 header 中,执​​行如下操作:

    <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 硬编码到 ajax 调用中。如果您不希望 url 在您的标准允许的情况下更改 and/or,那么这是一个可行的选择。