2016-07-29 62 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`沒有加載參考