MVC4 Internet-ProjektMVC 4 Ajax.BeginForm einreichen - verursacht vollständige Postbacks
Ich Ajax.BeginForm mit einem Postback mit Validierung zu tun und es postet eher die gesamte Seite zurück als nur die UpdateTargetID. Ich habe andere Beiträge auf SO angeschaut und habe die Antwort nicht gefunden. Ich habe ein neues MVC4 Internet-Projekt nur zum Testen erstellt (VS 2012 wurde mit 'ASP.NET und Web Tools 2012.2' aktualisiert).
Hier ist mein Code
-Controller
public ActionResult Index()
{
var vM = _db.Students.FirstOrDefault(); return View(vM);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Student vM)
{
if (ModelState.IsValid)
{ //code if Model valid
return Json(new { url = Url.Action("About", "Controller") });
}
ModelState.AddModelError(string.Empty, "AJAX Post");
return PartialView("Index", vM);
}
Ansicht
@model AJAX_Test.Models.Student
@{ ViewBag.Title = "Student"; }
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript"> var onSuccess = function (result)
{
if (result.url) { window.location.href = result.url; }
}
// when server returns JSON object containing an url property redirect the browser </script>
<h1>@ViewBag.Title</h1>
<div id="IDXForm">
@using (Ajax.BeginForm("Index", new AjaxOptions() { UpdateTargetId = "IDXForm", OnSuccess = "onSuccess", HttpMethod = "Post" }))
{
@Html.AntiForgeryToken() @Html.ValidationSummary(true)
<span>@Html.EditorFor(m => m.FirstName) @Model.EnrollmentDate.ToShortDateString()</span> <input type="submit" value="Submit" />
}
</div>
Die erste Ansicht ist:
Nach Submittal:
Quellcode für Körper nach submittal:
<div id="body">
<section class="content-wrapper main-content clear-fix">
<script src="/Scripts/jquery-1.8.2.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript"> var onSuccess = function (result) { if (result.url) { window.location.href = result.url; } }
// when server returns JSON object containing an url property redirect the browser </script>
<h1>Student</h1>
<div id="IDXForm">
<form action="/" data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-success="onSuccess" data-ajax-update="#IDXForm" id="form0" method="post"><input name="__RequestVerificationToken" type="hidden" value="vkCszJu-fKT6zUr5ys2StOTPF6a9pZdj5k1MyaAZKo8MPweS53dUuni0C9B17NjL_GVydHa7-jI1H0F9HrYEdKxeCWq9mCeER3ebaZYLxIs1" /><span><input class="text-box single-line" id="FirstName" name="FirstName" type="text" value="Carson" /> 9/1/2005</span> <input type="submit" value="Submit" />
</form></div>
Kann jemand sehen, was mit meinem Code falsch?
Vielen Dank.
1-3. Wie ich in OP gesagt habe, aus dem Layout aufgerufen und verifiziert haben, dass sie geladen und in der richtigen Reihenfolge sind, mit JQuery 1.8.2 (bewusst 1.9 Problem und zu vermeiden für jetzt), JSON-Code ist auskommentiert. Habe in IE9 Developer Tools nachgesehen und finde keine Fehler. Der Quellcode zeigt den zweiten "Student" nicht an. Ich nehme an, Sie haben in dem von mir geposteten Code keine Fehler gesehen. Wird sich morgens mehr ansehen. – Joe
Also können Sie den AJAX Anruf sehen? Auch IE9-Entwickler-Tools? Ernst? Bitte verwenden Sie einen echten Webbrowser, wenn Sie Ihren Code debuggen möchten. –
Ich habe meinen Beitrag aktualisiert. Skripte werden jetzt direkt in der Ansicht geladen. Ich habe sichergestellt, dass ModelState.IsValid im Debug fehlschlägt. Screenshots zeigen jetzt Chrome/Entwicklertools/Netzwerk und ich habe den Quellcode nach dem Senden eingefügt. Wie Sie sehen können, werden die Skripte geladen, der POST passiert und er erhält die beiden Skripte. Ist das, was Sie damit gemeint haben, der "AJAX Call"? Wenn nicht, wie kann ich das nachvollziehen? – Joe