مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

soudabeh

عضویت از 1395/01/12

مشکل validation در partial view

  • یکشنبه 30 مهر 1396
  • 16:46
تشکر میکنم

با سلام.

 من پروژه ای با 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();
                }
            }

        }

متشکرم

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 30 مهر 1396
  • 17:57

یعنی زمانی که مودال شما باز شد اطلاعات به سرور ارسال شده و وقتی که مدل معتبر نبود partial بازگردانی شده متن اعتبار سنجی را نمایش نمی دهد؟

کاربر سایت

shahin

عضویت از 1392/06/14

  • یکشنبه 30 مهر 1396
  • 20:09

برای فعالسازی در این حالت از کد های زیر قبل از اجرا شدن کد های درج استفاده کن :



            $('form').removeData('validator');
            $('form').removeData('unobtrusiveValidation');
            $.validator.unobtrusive.parse('form');

کاربر سایت

soudabeh

عضویت از 1395/01/12

  • دوشنبه 1 آبان 1396
  • 10:50

متشکرم از جوابتون.

یعنی باید این تکه رو توی partial view بذارم؟؟؟؟

کاربر سایت

soudabeh

عضویت از 1395/01/12

  • دوشنبه 1 آبان 1396
  • 10:52

آقای علیزاده متن اعتبار سنجی رو نشون میده اما partial  رو دیگه توی modal نشون نمیده و میره توی فرم خالی و partial رو اونجا نمایش میده. مثل عکسی که ضمیمه سوالم کردم

کاربر سایت

shahin

عضویت از 1392/06/14

  • دوشنبه 1 آبان 1396
  • 13:41

شما

@section scripts
    {
    @Scripts.Render("~/bundles/jqueryval")
}

رو درPartialView قرار دادین در صورتیکه باید در فرمی که این partialview لود میشه قرار بدین،

این کد ها هم درون script که نوشتی قرار بدهید

        $(function () {
            $(".anchorCreate").click(function () {
$('form').removeData('validator');
$('form').removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse('form');

کاربر سایت

soudabeh

عضویت از 1395/01/12

  • سه شنبه 2 آبان 1396
  • 09:08

ممنون از پاسختون

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)