【发布时间】:2016-12-04 18:30:31
【问题描述】:
我在 MVC asp.net 中遇到了 Ajax 表单的问题。当我发布表单并尝试从操作返回 json 结果时,我的 Onsuccess 方法不会触发并且视图不会显示。只有 json 对象显示为好像 jquery.unobtrusive-ajax.js 不起作用。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
html>
<head>
<meta name="viewport" content="width=device-width" />
<script src="~/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.form.js" type="text/javascript"></script>
<script type="text/javascript">
function OnSuccess(response) {
alert("oki");
if (response.success == true) {
$(location).attr('href', response.ReturnUrl);
}
else {
$('form').clearForm();
$("#message").css("display", "block");
}
}
</script>
<title>Login</title>
</head>
<body>
@using (Ajax.BeginForm("login2",new {ReturnUrl=Request.QueryString["ReturnUrl"]}, new AjaxOptions
{
OnSuccess = "OnSuccess"
}))
{
@Html.Label("Nom :", new { @class = "monlabel" })
@Html.TextBoxFor(m => m.Login, new { placeHolder = "Nom", @class = "tb" })
@Html.ValidationMessageFor(m => m.Login)
@Html.Label("Mot de passe :", new { @class = "monlabel" })
@Html.TextBoxFor(m => m.Password, new { placeHolder = "Mot de passe", @class = "tb" })
@Html.ValidationMessageFor(m => m.Password)
<input id="bouton" type="submit" value="Valider" /><br />
}
<div><p style="display:none" id="message">Authentification erronée</p></div>
</body>
</html>
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
public ActionResult login()
{
return View();
}
public JsonResult login2(Models.Utilisateur utilisateur, string ReturnUrl)
{
Models.LoginDataContext MyDb = new Models.LoginDataContext();
Models.Utilisateur tmpUser = null;
ViewBag.result = "oki";
tmpUser = MyDb.ValidateUser(utilisateur.Login, utilisateur.Password).FirstOrDefault();
if (tmpUser != null)
{
Session["User"] = tmpUser;
FormsAuthentication.SetAuthCookie(tmpUser.Login, false);
//return RedirectToAction("AccesValider");
if (ReturnUrl != null) return Json(new {success=true,@ReturnUrl=ReturnUrl},JsonRequestBehavior.AllowGet);
else return Json(new {success=true,@ReturnUrl=FormsAuthentication.DefaultUrl },JsonRequestBehavior.AllowGet);
}
return Json(new {success=false,@ReturnUrl =""},JsonRequestBehavior.AllowGet);
}
}
我得到这个结果:
{"success":true,"ReturnUrl":"/Home/Index"}
在浏览器中
【问题讨论】:
-
您的
jquery.unobtrusive-ajax.js未加载。有关任何错误,请参阅浏览器 console.log。以及该文件的文件路径。如有错误请指出谢谢。 -
或者
UnobtrusiveJavaScriptEnabled在你的配置文件中没有设置为true。