代码的意图:此代码的目的是接受通过作用域传递给它的数据并放置在一个数组中,以通过AJAX传递给Login控制器(服务器端)。
问题AJAX代码似乎没有成功联系服务器端操作。
以下是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
}
}
预期的结果是传递回客户端代码,无论传递的字符串与数据库中的内容是否匹配。
几件事:
$Http({...
不是一个真正的ajax函数。我建议使用$.post()
用于[HttpPost]
和$.get()
用于[HttpGet]
。您可以在jQuery的文档中详细查看:https://api.jquery.com/jquery.post/@(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调用中。如果您不预期更改网址和/或您的标准是否允许,这是一个可行的选项。