Mam na swojej stronie kapsułkę zawierającą formularz.
Użyłem tego zasobnika w podobny sposób jak poniżej:
@Html.Action("Pod","Home")
Jest pewne sprawdzanie reguł biznesowych w akcji HttpPost w Pod, która obsługuje formularz post. Jeśli ta reguła biznesowa się nie powiedzie, dodaję błąd do stanu modelu.
Problem polega na tym, że gdy reguła biznesowa się nie sprawdza. Zwracam akcję Widok z zasobnika, która pokazuje tylko zasobnik na pustej stronie.
Jak poprawnie ponownie użyć takiego formularza i nadal sprawdzać poprawność tej reguły biznesowej po stronie serwera (wymaga to sprawdzania poprawności bazy danych)?
Odpowiedzi:
6 dla odpowiedzi № 1Jedną z możliwości jest AJAXify formularza w Pod
częściowy:
<div id="pod">
@Html.Action("Pod","Home")
</div>
i w środku Pod.cshtml
:
@using (Html.BeginForm("Pod", "Home", FormMethod.Post, new { id = "podForm" }))
{
...
}
wreszcie AJAXify to:
$(function() {
$("#podForm").submit(function() {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
$("#pod").html(result);
}
});
});
});
Ostatnią rzeczą, którą należy upewnić się, jest to, że akcja POST zwraca plik Pod.cshtml jako częściowy widok. Dwie możliwości:
[HttpPost]
public ActionResult Pod(PodViewModel model)
{
if (!ModelState.IsValid)
{
return PartialView(model);
}
...
}
lub w Pod.cshtml
częściowy:
@{
Layout = null;
}