На данный момент у меня проблема с формой в MVC5:
После отправки формы я отправляю запрос ajax контроллеру, который должен позаботиться об операции CRUD, а затем вернуть представление.
Если ModelState действителен, он должен вернуть пустую форму, в противном случае он должен вернуть форму с сообщениями об ошибках проверки.
Моя проблема в том, что когда мое представление возвращается, если ModelState действителен, форма не очищается, несмотря на возврат пустой модели.
Вот фактическая часть вызова ajax:
$.ajax({
url: urlAction,
type: 'POST',
data: formData,
dataType: 'html',
success: function(code_html) {
$("#addUserForm").html(code_html);
}
});
И код контроллера:
[HttpPost]
public ActionResult CreateUserAndContinue(AjoutUtilisateurViewModel data)
{
if (ModelState.IsValid)
{
// INSERT In DB.
return PartialView("AjoutUtilisateurPartial", new AjoutUtilisateurViewModel());
}
return PartialView("AjoutUtilisateurPartial", data);
}
Основной код представления связан:
<div id="addUserForm">
@Html.Partial("AjoutUtilisateurPartial")
</div>
Частичный вид:
<div id="AddUserADForm">
@using (Html.BeginForm("CreateUserAndContinue", "Habilitation", FormMethod.Post, new { @id = "addUserAD" }))
{
@Html.EditorForModel()
<div class="interSmall">
<div class="ligneOrangeHaut droite">
<a id="btnSubmitAndContinue" class="button" href="#">Créer & Continuer</a>
<a id="btnSubmitAndStop" class="button" href="#">Créer & Stop</a>
</div>
</div>
}
</div>
Вот код формы: (вызывается EditorForModel())
@model AjoutUtilisateurViewModel
<div class="indentBig interSmall">
<div class="col45 interSmall padding-left-5">
@*@Html.ValidationMessage("error")*@
@Html.ValidationMessageFor(model => model.Matricule)
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Matricule, new { @class = "label110" })
@Html.TextBoxFor(x => x.Matricule)
<a id="TestMatricule" class="button" href="#">Test</a>
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.EtatCompte, new { @class = "label110" })
@Html.DropDownListFor(model => model.EtatCompte, new[] { new SelectListItem { Text = "Actif", Value = "true" }, new SelectListItem { Text = "Inactif", Value = "false" } })
</div>
</div>
<div class="clear-both"></div>
<div class="indentBig interSmall">
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Nom, new { @class = "label110" })
@Html.TextBoxFor(x => x.Nom, new { disabled = "true" })
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Prenom, new { @class = "label110" })
@Html.TextBoxFor(x => x.Prenom, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Service, new { @class = "label110" })
@Html.TextBoxFor(x => x.Service, new { disabled = "true" })
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Bureau, new { @class = "label110" })
@Html.TextBoxFor(x => x.Bureau, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Telephone, new { @class = "label110" })
@Html.TextBoxFor(x => x.Telephone, new { disabled = "true" })
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Courriel, new { @class = "label110" })
@Html.TextBoxFor(x => x.Courriel, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Adresse, new { @class = "label110" })
@Html.TextBoxFor(x => x.Adresse, new { disabled = "true" })
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.CodePostal, new { @class = "label110" })
@Html.TextBoxFor(x => x.CodePostal, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Ville, new { @class = "label110" })
@Html.TextBoxFor(x => x.Ville, new { disabled = "true" })
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.Departement, new { @class = "label110" })
@Html.TextBoxFor(x => x.Departement, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.OU, new { @class = "label110" })
@Html.TextBoxFor(x => x.OU, new { disabled = "true" })
</div>
<div class="clear-both"></div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.ZoneLibre1, new { @class = "label110" })
@Html.TextBoxFor(x => x.ZoneLibre1)
</div>
<div class="col45 interSmall padding-left-5">
@Html.LabelFor(x => x.ZoneLibre2, new { @class = "label110" })
@Html.TextBoxFor(x => x.ZoneLibre2)
</div>
<div class="clear-both"></div>
</div>
Это шаблон редактора.
Эта проблема смущает меня, потому что у меня есть действительно похожая функция, которая заполняет форму и возвращает PartialView с предустановленной моделью, которая отлично работает. Но, будучи новичком в MVC, я, вероятно, упускаю что-то важное.
Любая помощь приветствуется :)