progetto MVC4 InternetMVC 4 Ajax.BeginForm presentare - provoca piena postback
sto usando Ajax.BeginForm di fare un postback con la convalida e il postback dell'intera pagina piuttosto che solo l'UpdateTargetID. Ho visto altri post su SO e non ho trovato la risposta. Ho creato un nuovo progetto Internet MVC4 solo per i test (VS 2012 è stato aggiornato con 'ASP.NET e Web Tools 2012.2').
Ecco il mio codice
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);
}
View
@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>
La visualizzazione iniziale è:
Dopo Submittal:
Il codice sorgente per il corpo dopo la presentazione:
<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>
chiunque può vedere ciò che è sbagliato con il mio codice?
Grazie.
1-3. Come ho detto in OP, chiamato dal layout e verificato che sono stati caricati e nell'ordine corretto, usando jQuery 1.8.2 (a conoscenza del problema 1.9 ed evitando per ora), il codice JSON è commentato. Hanno esaminato in IE9 Developer Tools e non possono trovare errori. Il codice sorgente non mostra il secondo "Studente". Presumo che non hai visto errori nel codice che ho postato. Guarderemo più al mattino. – Joe
Quindi puoi vedere la chiamata AJAX in corso? Inoltre, 'Strumenti per sviluppatori IE9'? Sul serio? Utilizzare un browser Web reale se si desidera poter eseguire il debug del codice. –
Ho aggiornato il mio post. Gli script vengono ora caricati direttamente in vista. Mi sono assicurato che ModelState.IsValid fallisse nel debug. Le schermate ora mostrano Chrome/Strumenti per sviluppatori/Rete e ho incluso il codice sorgente dopo l'invio. Come puoi vedere, gli script vengono caricati, il POST sta accadendo e OTTIENE i due script. Questo è ciò che intendevi per "essere fatta la chiamata AJAX"? Se no come faccio a rintracciarlo? – Joe