MVC 5 AJAX代码不访问控制器类操作服务器端

问题描述 投票:0回答:1

代码的意图:此代码的目的是接受通过作用域传递给它的数据并放置在一个数组中,以通过AJAX传递给Login控制器(服务器端)。

问题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
    }
}

预期的结果是传递回客户端代码,无论传递的字符串与数据库中的内容是否匹配。

c# asp.net-mvc-5 asp.net-ajax
1个回答
2
投票

几件事:

  1. $Http({...不是一个真正的ajax函数。我建议使用$.post()用于[HttpPost]$.get()用于[HttpGet]。您可以在jQuery的文档中详细查看:https://api.jquery.com/jquery.post/
  2. 该URL无效。你无法访问JS内部的razor helper方法。因此,你真的将@(Url.Action("CheckUser","Login"))传递到你的网址,所以它看起来像localhost:3000/@(Url.Action("CheckUser","Login")),显然不是一个合法的路线。您将不得不以不同的方式获取您的ajax函数的URL。一些选择:

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硬编码到ajax调用中。如果您不预期更改网址和/或您的标准是否允许,这是一个可行的选项。

© www.soinside.com 2019 - 2024. All rights reserved.