Bunu bir araya nasıl koyacağınızı bilmek gerçekten çok zor. .net MVC sayfalarının içinde, doğrulanmış ve doğrulanmamış formlar oluşturdum. Ve doğrulama ile ve olmadan jQuery kullanarak formlar oluşturdum. Ve bir modalın içinde formlar inşa ettim, ama MVC ile asla.Doğrulama ile jQuery kullanarak bir Modal içinde bir .NET MVC Formu nasıl yapılır
original question sayfamdan anladım, çünkü bu form, gönderim işlemek için jQuery kullanması gereken bir modal içerisindedir. Bütün bu hareketli parçaları nasıl bir araya getireceğimi anlatan bir zamanım var. Şimdiye kadar, hepsini bir araya getiren bir öğretici (ya da öğreticilerden oluşan bir kombinasyon) bulamadım. İşte
ben gerekenler: Benim MVC görünümü içinde
- bir kalıcı açan bir düğme bulunur. (Bu iyi çalışıyor.)
- Model açıldığında, birkaç metin alanı ve açılır menü içeren bir form içerir. Her biri gereklidir. (Alanları gerekli yapmak için, bunları normalde bir MVC formunda yaptığım gibi bu görünümün modelinde tanımlayabilir miyim? Veya jQuery'deki gereksinimleri nasıl oluştururum?)
- Kullanıcı formu göndermeyi denerse ve boş veya geçersiz, modal açık kalır ve doğrulama mesajları görünür. (Anladığım kadarıyla, bu benim için original question, bu mod nedeniyle düz MVC kullanarak mümkün değildir ve bazı jQuery gereklidir. Burada kayboldum.)
- Kullanıcı formu ve tüm göndermeyi denerse Alanlar geçerlidir, sonra modal kapanır, biz denetleyiciye çarparız ve alanları db'ye kaydederiz.
DÜZENLEME (jQuery dışına kaçmak ve sadece nihai mantığı işlemek için normal bir denetleyici vurmak nasıl emin olun.):
Yardımlarınız için, Jason teşekkür ederiz! Önerilerinize göre, işte bu şekilde çalışıyorum.
Veli Görünüm:
modal:
@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>
}
Kısmi View (zayıflayan):
burada ardından<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>
Ve komut var
@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>
}
Denetleyici:
[HttpPost]
public ActionResult AccountProfileEdit(AccountProfileEditViewModel model)
{
if (ModelState.IsValid)
{
// logic to store form data in DB
}
return PartialView("_AccountProfileEdit", model);
}
Jason, önce TEŞEKKÜRLER! Zaman ve yardım için gerçekten minnettarım. İkincisi, üzgünüm cevap vermem çok uzun sürdü. Tatildeyim. Ama bu hala çözmem gereken bir konu. Ve üçüncü olarak, önerilerinize dayanarak OP'ime bir düzenleme yaptım. Basit bir şey kaçırdığına eminim, ama hala çalışmıyor. –
Sık kullandığınız zaman navigasyon, varsayılan gönderiminizi doğru bir şekilde engellemediğiniz anlamına gelir. Herhangi bir komut dosyası hatası olmadığından emin olun. Gönderen işleyicinizi '$ (document) .ready()' içinde taşıyın. Bir sağlık kontrolü olarak ajax çağrısını kaldırın, herhangi bir şey olmadan gönderme düğmesine basabilmek isteyebilirsiniz. – Jasen
Bam! Komut dosyasını $ (document) .ready() içinde taşımak kicker! Çok teşekkür ederim! –