با سلام.
من پروژه ای با mvc دارم. که توی فرم index اطلاعاتی رو نمایش میدم و button ی هم برای درج رکورد جدید دارم.
این لینک دکمه جدید هستش:
<a href="javascript:void(0);" class="anchorCreate white-text text-center btn btn-primary waves-effect waves-light modal-trigger" data-id="0">جدید</a>
که با استفاده از json متد partial view مربوط به create رو صدا میزنه.
<div id='myModal' class='modal'> <div class="modal-content"> <div id='myModalContent'></div> </div> </div> @section scripts { <script> var Create_TeamDetailPostBackURL = '/Admin/Role/Create'; $(function () { $(".anchorCreate").click(function () { debugger; var $buttonClicked = $(this); var id = $buttonClicked.attr('data-id'); var options = { "backdrop": "static", keyboard: true }; $.ajax({ type: "GET", url: Create_TeamDetailPostBackURL, contentType: "application/json; charset=utf-8", data: { "Id": id }, datatype: "json", success: function (data) { debugger; $('#myModalContent').html(data); $('#myModal').modal(options); $('#myModal').openModal(); }, error: function () { alert("Dynamic content load failed."); } }); }); $("#closbtn").click(function () { $('#myModal').modal('hide'); }); }); </script> } این هم از partial view من: @model db.Areas.Admin.Models.Role <div class="modal-header"> <h6 class="modal-title text-center" id="editor-title">جدید</h6> </div> @using (Html.BeginForm("Create", "Role")) { @Html.AntiForgeryToken() <div class="form-horizontal"> @Html.ValidationSummary("", new { @class = "red" }) <div class="form-group"> @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.TextBoxFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> </div> </div> <div class="modal-footer"> <input type="submit" value="ذخیره" class="btn btn-success left col-lg-2 col-xs-4 col-sm-6" /> </div> } @section scripts { @Scripts.Render("~/bundles/jqueryval") }
مشکل من اینه که validation مربوط به required بودن فیلد name رو دوباره توی modal نمایش نمیده و مثل تصویر ضمیمه نشون میده. چی کار میتونم بکنم که validation ها رو توی همون modal به درستی نمایش بده؟
این هم کد پشت متد create:
[HttpPost] [ValidateAntiForgeryToken] [HandleError] public ActionResult Create([Bind(Include = "RoleID,Name")] Role role) { using (var dbContextTransaction = db.Database.BeginTransaction()) { try { if (ModelState.IsValid) { db.Roles.Add(role); db.SaveChanges(); dbContextTransaction.Commit(); return RedirectToAction("Index"); } return PartialView("Create", role); } catch (Exception ex) { dbContextTransaction.Rollback(); ModelState.AddModelError("", ex.Message); return RedirectToAction("Index", "Error", new { errorMsg = "عملیات با خطا مواجه شد" }); } finally { dbContextTransaction.Dispose(); } } }
متشکرم
یعنی زمانی که مودال شما باز شد اطلاعات به سرور ارسال شده و وقتی که مدل معتبر نبود partial بازگردانی شده متن اعتبار سنجی را نمایش نمی دهد؟
برای فعالسازی در این حالت از کد های زیر قبل از اجرا شدن کد های درج استفاده کن :
$('form').removeData('validator'); $('form').removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse('form');
متشکرم از جوابتون.
یعنی باید این تکه رو توی partial view بذارم؟؟؟؟
آقای علیزاده متن اعتبار سنجی رو نشون میده اما partial رو دیگه توی modal نشون نمیده و میره توی فرم خالی و partial رو اونجا نمایش میده. مثل عکسی که ضمیمه سوالم کردم
شما
@section scripts { @Scripts.Render("~/bundles/jqueryval") }
رو درPartialView قرار دادین در صورتیکه باید در فرمی که این partialview لود میشه قرار بدین،
این کد ها هم درون script که نوشتی قرار بدهید
$(function () { $(".anchorCreate").click(function () {
$('form').removeData('validator'); $('form').removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse('form');
ممنون از پاسختون
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)