首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 5 AJAX代码没有访问控制器类操作服务器端

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

Stack Overflow用户
提问于 2019-02-12 16:07:32
回答 1查看 54关注 0票数 0

代码的意图:该代码的目的是接受通过数组中的作用域和位置传递给它的数据,通过AJAX将其传递给Login控制器(服务器端)。

问题代码似乎并没有成功地联系到服务器端操作。

  1. 我尝试将该操作从登录控制器移到主控制器:No .
  2. 我试着遵循那些以前遇到过这个问题的人的指导方针: following .
  3. 我尝试过硬编码这个动作的网址:No .

下面是AJAX调用:

代码语言:javascript
复制
    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);
                        }
                    }
                });

接下来是行动代码:

代码语言:javascript
复制
     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
    }
}

预期的结果是将字符串的比较传递回客户端代码,以及数据库中的内容是否匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 16:12:15

几件事:

  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")),这显然不是一条合法的路径。您必须以不同的方式获得ajax函数的URL。一些备选方案:

1)在.cshtml文件的头文件中,执行如下操作:

代码语言:javascript
复制
    <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会更改和/或如果您的标准允许的话,这是一个可行的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54654227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档