Я действительно изо всех сил стараюсь понять, как все это сделать. Я много раз создавал формы внутри .net MVC-страниц, с проверкой и без нее. И я создал формы, используя jQuery, с и без проверки. И я создал формы внутри модального, но никогда не с MVC.
Я понимаю из своего оригинального вопроса, потому что эта форма внутри модала, что мне нужно будет использовать jQuery для обработки submit. У меня есть чертовски время выяснить, как собрать все эти движущиеся части вместе. До сих пор я не нашел учебника (или комбо учебников), который объединяет все это.
Вот что мне нужно:
- Внутри моего MVC-представления есть кнопка, которая открывает модальную. (Это прекрасно работает.)
- Как только модальный файл открывается, он содержит форму с несколькими текстовыми полями и выпадающими меню. Каждый из них требуется. (Чтобы сделать нужные поля, я бы определил их в модели представления, как обычно, с формой MVC? Или я создаю требования в jQuery?)
- Если пользователь пытается отправить форму, и они пусты или недействительны, модальная версия остается открытой и появляются сообщения проверки. (Я понимаю, из моего оригинального вопроса, что это невозможно, используя прямой MVC из-за модальности, и что требуется какой-то jQuery. Я потерялся здесь.)
- Если пользователь пытается отправить форму, и все поля являются допустимыми, тогда модальная закрывается, мы нажимаем на контроллер и сохраняем поля в db. (Не уверен, как выйти из jQuery и просто нажать на обычный контроллер для обработки конечной логики.)
EDIT:
Спасибо, Джейсон, за вашу помощь! Основываясь на ваших предложениях, вот как я работал.
Родительский просмотр:
Модальный:
<div class="modal fade" id="AccountEditModal" tabindex="-1" role="dialog" aria-labelledby="AccountEditModalLabel">
<div class="modal-dialog modalAccountEdit" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h3><strong>Edit Account Profile - <span class="accountname"></span></strong></h3>
</div>
<div class="modal-body">
<div id="formContent">
@Html.Partial("_AccountProfileEdit", new GEDCPatientPortal.Models.AccountProfileEditViewModel())
</div>
</div>
</div>
</div>
</div>
И тут скрипты:
@section Scripts {
<script>
$(document).ready(function () {
$('#AccountEditModal').on('shown.bs.modal', function () {
$('#myInput').focus()
})
$("#AccountEditModal").on("submit", "#form-accountprofileedit", function (e) {
e.preventDefault(); // prevent standard form submission
var form = $(this);
$.ajax({
url: form.attr("action"),
method: form.attr("method"), // post
data: form.serialize(),
success: function (partialResult) {
$("#formContent").html(partialResult);
}
});
});
});
</script>
}
Частичный вид (уменьшенный):
@using (Html.BeginForm("AccountProfileEdit", "Account", FormMethod.Post, new { id = "form-accountprofileedit", @class = "full-form" }))
{
@Html.CustomTextboxFor(model => model.Address)
<div style="text-align:right;">
<button type="submit" id="accountprofileedit-submit" name="accountprofileedit-submit" value="Edit Account" class="btn btn-primary" style="margin-left:5px;">Edit Account</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button>
</div>
}
Контроллер:
[HttpPost]
public ActionResult AccountProfileEdit(AccountProfileEditViewModel model)
{
if (ModelState.IsValid)
{
// logic to store form data in DB
}
return PartialView("_AccountProfileEdit", model);
}