2016-06-11 9 views
0

ich diesen Ajax.BeginForm-Code haben:kann nicht auf neue Seite Ajax Begin umleiten

<script> 
    function createsuccess(data) { 
     if (data.RedirectUrl) { 

      window.location.href = data.RedirectUrl; 
     } 
    } 
</script> 
    @using (Ajax.BeginForm("New", "Profile", null, new AjaxOptions() 
      { 
       HttpMethod = "Post", 
       InsertionMode = InsertionMode.Replace, 
       OnSuccess = "createsuccess" 
      })) 
      { 
       @Html.AntiForgeryToken() 
       @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 

       //HTML-code 
      } 

Hier ist meine neue Aktion in meinem Profil Controller:

[HttpPost] 
public ActionResult New(Profile model) 
{ 
    model.UserId = UserId; 

    if (_profileService.CreateProfile(model) > 0) 
    { 
     var encryptedProfileId = Encryption.Protect(model.ProfileId.ToString(), UserId.ToString()); 
     Response.Cookies["ProfileId"].Value = encryptedProfileId; 

     return Json(new { RedirectUrl = Url.Action("Index", "Welcome") }); 
    } 
    return View(); 
} 

Als ich das laufen und versucht, ein neues Profil zu erstellen, ich bin nicht Redirect. Stattdessen werde ich mit der folgenden JSON-Anzeige zurück zu meiner neuen Seite umgeleitet: enter image description here

Warum werde ich nicht umgeleitet? Wer kann mir helfen?

+2

Da Sie 'jquery.unobtrusive.ajax.js' nicht enthalten haben (bit, warum in der Welt benutzen Sie Ajax, wollen Sie umleiten) –

+0

@StephenMuecke: Ich habe es aufgenommen. Aber es scheint nicht geladen zu sein. Und ich weiß nicht warum. – Bryan

+0

Stephen hat Recht. Sie fügen mit AJAX viel Komplexität hinzu und profitieren davon nicht. AJAX ist speziell * für * den Server anzurufen, während die Seite nicht weitergeleitet wird. Sie sollten es eliminieren, indem Sie 'Html.BeginForm' in Ihrer Ansicht verwenden und 'return RedirectToAction (" Index "," Willkommen ");' von Ihrer Aktionsmethode anstelle von JSON zurückgeben. – NightOwl888

Antwort

0

Fügen Sie "jquery.unobtrusive-ajax.js" zu Ihrer Seite hinzu. Wenn Sie die „Bündelung“ -Funktion in System.Web.Optimization verwenden, eine einfache Möglichkeit wäre es zu dem Bündel jQuery hinzuzufügen:

bundles.Add(new ScriptBundle("~/bundles/jquery") 
    .Include("~/Scripts/jquery-{version}.js") 
    .Include("~/Scripts/jquery.unobtrusive-ajax.js")); 

können Sie auch nur einen <script>-Tag hinzufügen, die an das Skript verweist .

Verwandte Themen