code ci-dessous est prêt à tester: MVC3Arrêtez de rafraîchir une fois un message de succès du serveur reçu du contrôleur
Le problème est quand je e.preventDefault activer(); que les erreurs individuelles n'apparaissent pas en face de chaque contrôle généré par ValidationMessageFor et en affichant lorsque e.preventDefault(); est autorisé. Toutes les erreurs fonctionnent correctement, mais une fois le code de traitement et un message réussi retour du côté serveur font toute la page postback/REFRESH :(
Question:.Comment j'arrête toute la page de Refresh/Postback si e. preventDefault(), est activé et obtenir message de réussite du serveur
<script type="text/javascript">
$(function() {
$("#personCreate").click(function (e) {
//e.preventDefault(); -------> Here is the problem
var profile = {
FirstName: $("#FirstName").val(),
LastName: $("#LastName").val()
};
$.ajax({
url: '/Test/save',
type: 'POST',
dataType: 'json',
data: JSON.stringify(profile),
contentType: 'application/json; charset=utf-8',
//beforeSend: function() { $("#saveStatus").html("Saving").show(); },
//complete: function() { $("#saveStatus").html("Saving").hide(); },
success: function (data) {
// get the result and do some magic with it
var message = data.Message;
$("#resultMessage").html(message);
}
});
});
});
</script>
// Code contrôleur
[HttpPost]
public ActionResult Save(CreateViewModel userVm)
{
if (ModelState.IsValid)
{
return Json(new CreateViewModel { Message = "Passed" });
}
else
{
return Json(new CreateViewModel { Message = "Failed" });
}
}
?
//Create.cshtml
<span id="saveStatus"></span>
@using(Html.BeginForm())
{
<fieldset>
<legend>Contact Information</legend>
<div>
<table class="form-spacing">
<tr>
<td class="cell-one">* @Html.LabelFor(model => model.FirstName) :</td>
<td class="cell-two">@Html.TextBoxFor(model => model.FirstName, new { @class = "big-field", tabindex = "1" })</td>
<td class="cell-three" >@Html.ValidationMessageFor(model => model.FirstName)</td>
</tr>
<tr>
<td class="cell-one">* @Html.LabelFor(model => model.LastName) :</td>
<td class="cell-two">@Html.TextBoxFor(model => model.LastName, new { @class = "big-field", tabindex = "2" })</td>
<td class="cell-three" >@Html.ValidationMessageFor(model => model.LastName)</td>
</tr>
</table>
</div>
</fieldset>
<p>
<input type="submit" value="Save" id="personCreate" />
</p>
}
<div>
<span id="resultMessage"></span>
</div>
Au lieu de ActionResult si je rentrais JsonResult encore que sa ne fonctionne pas et la page est l'affichage arrière. – Pirzada
Je devrais dire que e.preventDefault(); Empêche la validation côté client pour chaque contrôle. – Pirzada