我正在尝试通过ajax导航我的请求。
当用户通过身份验证时,会转到ajax成功函数的另一个网址 -
success:function(data,result)
{
window.location.url='@Url.Action("Home","Index");
}
我的控制器是 -
public void _LoginPartial(LoginModel login) {
try {
var system = (from u in db.RegisterLedgers
where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
select u).FirstOrDefault();
if (system != null) {
Session["LoggedInUser"] = system;
FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
}
}
catch (Exception ex) {
ModelState.AddModelError("", ex);
}
}
Ajax查询是 -
<script type="text/javascript">
$(function () {
$('#Login-button').click(function () {
$.ajax({
url: '/loginledger/_loginpartial/',
data: $('#form-loginpartial').serialize(),
type: 'post',
success: function (data, result) {
alert(result);
alert(data);
},
error: function () {
alert("Form couldn't be submitted");
}
});
});
});
</script>
它显示ajax查询成功但数据为空。我在服务器端检查了这个请求,它从数据库中取出记录。
为什么我在ajax成功函数中得到空结果?我在这里做错了什么?
答案 0 :(得分:4)
我在这里做错了什么?
您的控制器操作似乎没有返回任何内容。这只是一个void
。在ASP.NET MVC Controller中,操作必须返回ActionResults。
例如,您可以使用JsonResult
public ActionResult _LoginPartial(LoginModel login)
{
try
{
var system =
(from u in db.RegisterLedgers
where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
select u).FirstOrDefault();
if (system != null)
{
Session["LoggedInUser"] = system;
FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
return Json(new { success = true; });
}
}
catch (Exception ex)
{
ModelState.AddModelError("", ex);
}
return Json(new { success = false; });
}
你可以检查你的AJAX成功回调:
success: function (data) {
alert(data.success);
}
答案 1 :(得分:3)
您的_LoginPartial
操作没有返回类型(void
)。您必须为_LoginPartial
操作设置返回类型,然后返回一些内容。例如return View()
或return Json()
。
修改签名:
public ActionResult _LoginPartial(LoginModel login)
{
// also a good idea to check `ModelState.IsValid`
if (ModelState.IsValid)
{
// Go ahead and log them in if everything checks out, then return
// your successful response
return Json(new { status = 200, msg = "OK" });
}
// Erroneous response
return Json(new { status = 401, msg = "Unauthorized" });
}
只是举例;显然,你可以按照自己的意愿实施它。
答案 2 :(得分:1)
你的行动应该返回一些东西(推荐JsonResult)。要做到这一点,请用ActionResult或JsonResult替换返回类型(void),并在函数结束时返回Json(),如下所示:
public ActionResult_LoginPartial(LoginModel login) {
try {
var system = (from u in db.RegisterLedgers
where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
select u).FirstOrDefault();
if (system != null) {
Session["LoggedInUser"] = system;
FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
return Json(data = result, message = "suceed" JsonRequestBehavior.AllowGet);
}
return Json(data=null, message = "system is null" JsonRequestBehavior.AllowGet);
}
catch (Exception ex) {
ModelState.AddModelError("", ex);
return Json(data=null, message = "exception" JsonRequestBehavior.AllowGet);
}
}