2016-07-29 41 views
1

我在MVC asp.net中的Ajax表单有问题。当我发布表单并尝试从操作返回json结果时,我的Onsuccess方法不会触发,并且不显示视图。只有json对象显示为jquery.unobtrusive-ajax.js不起作用。MVC asp.net Ajax表单操作返回Json结果

<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"} 
在浏览器

+0

。有关任何错误,请参阅浏览器console.log。和这个文件的文件路径。如果有任何错误,请提及谢谢。 –

+0

或者''UnobtrusiveJavaScriptEnabled'未在您的配置文件中设置为'true'。 – Jacob

回答

0

要使用ASP.NET MVC任何@Ajax功能,你需要一个有效的参考到jquery.unobtrusive图书馆。如果你得到{"success":true,"ReturnUrl":"/Home/Index"}作为回应它是一个死的放弃,你没有正确引用jquery.unobtrusive库。

你有两个选择:

1.Replace这一行代码:

<script src="~/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> 

有了这个:

<script src="https://cdn.jsdelivr.net/jquery.ajax.unobtrusive/3.2.4/jquery.unobtrusive-ajax.min.js"></script> 

2.如果您不想使用CDN你可以安装jquery.unobtrusive nuget包。

2.1在Visual Studio中单击工具 - > NuGet包管理器 - >程序包管理器控制台

2.2类型Install-Package Microsoft.jQuery.Unobtrusive.Ajax,然后按Enter。

2.3拖放从Visual Studio解决方案资源管理器jquery.unobtrusive-ajax.js文件到您的网页创建你的`jquery.unobtrusive-ajax.js`没有加载参考