1 ضمیمه
عدم اجرای document.ready در ویو لود شده در jQuery dialog
با سلام خدمت دوستان، من میخوام صفحات ایجاد رکورد جدید و ویرایش رکورد رو که قبلا توی page جدا به کاربر نمایش میدادم الان میخوام توی jquery dialog توی صفحه مثلا لیست رکوردها نمایش بدم که فک کنم کاربر پسند تر باشه.
من توی صفحه ایجاد و ویرایش رکورد یه اسکریپت توی document.ready نوشتم که در حالت عادی که صفحه جدا باز بشه کار میکنه و اجرا میشه اما وقتی بخوام این صفحه رو توی page لیست رکوردها داخل jquery dialog باز کنم، تابع document.ready مربوط به صفحه ایجاد رکورد، اجرا نمیشه که خب طبیعی هم هست، چون صفحه لیست رکوردها قبلا لود شده
حالا میخوام راهنمایی کنین که برای حل این مشکل چیکار کنم؟ مثلا مقداردهی های اولیه ای که توی تابع ready قرار دادم چجوری و کجا باید انجام بدم؟
اینم یه عکس از دیالوگ:
ضمیمه 148495
اینم سکریپتی که توی صفحه ایجاد رزرو نوشتم و اجرا نمیشه:$(document).ready(function () {
var d = new Date();
d.setDate(d.getDate() - 0);
var startDay = parseInt(d.getTime());
d.setDate(d.getDate() + 24);
var endDay = parseInt(d.getTime());
$("#ReservedForDate").persianDatepicker({
initialValueType: 'persian',
format: 'YYYY/MM/DD',
autoClose: true,
minDate: startDay,
maxDate: endDay,
onSelect: function () { $("#ReservedForDate").change(); }
});
$("#ReservedForDate").change(function () {
OnChangeDateField();
})
OnChangeDateField();
ToggleTransactionNumField();
});
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
اول باید مطمئن بشید که کدهای جاوا اسکریپت شما در انتهای صفحه لود میشه. باید در Layout یک Section تعریف کنید و کدهای جاوا اسکریپت هر صفحه رو درون اون Section قرار بدید.
کدهای یک صفحه در ASP درون صفحه ی Layout قرار میگیره و بعد به کاربر ارسال میشه. اگر Section نداشته باشید کد جاوا اسکریپت شما ممکنه قبل از لود صفحه و فایل jQuery لود بشه که حتما خطا میده و درست کار نمیکنه.
برای طراحی این نوع صفحات بهتره از یک فریم ورک مخصوص این کار استفاده کنید. مثلا Vue.js برای اینکار بسیار مناسبه.
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
section مربوط به سکریپت ها اخر layout قرار داره و داخل صفحه ایجاد رزرو هم اخر صفحه، section رو باز کردم و فایل های سکریپتم داخلش هست، این از layout:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/unobtrusive")
@Scripts.Render("~/bundles/bootstrap")
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
@Scripts.Render("~/bundles/klorofil")
@RenderSection("scripts", required: false)
اینم انتهای فایل View ایجاد رزرو:
@section Scripts{
@Scripts.Render("~/bundles/jqueryval")
<script src="~/Scripts/Admin.js"></script>
<script src="~/Content/pwt.datepicker-master/assets/persian-date.min.js"></script>
<script src="~/Content/pwt.datepicker-master/dist/js/persian-datepicker.min.js"></script>
}
این نکته رو هم بگم که بقیه سکریپت های موجود توی فایل admin.js (همین فایلی که سکریپت هام رو توش نوشتم توی صفحه ایجاد رزرو) کار میکنن فقط بخش document.ready کار نمیکنه
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
بهترین کار اینه که اسکریپت رو دیباگ کنید. با F12 در کروم میتونید خط به خط مسیر اجرای اسکریپت رو دنبال کنید.
درون اسکریپت یک Log یا Alert قرار بدید ببینید اجرا میشه یا نه
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
ببینید شاید من منظور و قصدم رو کامل نرسوندم، من وقتی بخوام این ویوی ایجاد رزرو رو بصورت جداگانه یعنی داخل یه صفحه دیگه بصورت مجزا باز کنم همه چی اوکیه مشکلی در اجرای سکریپت ها وجود نداره، ولی وقتی میخوام همون صفحه یا ویو رو بیارم توی jquery dialog نمایش بدم فقط سکریپت مربوط به document.ready صفحه ایجاد رزرو کار نمیکنه بقیه سکریپت ها کامل کار میکنن.
به نظرم دلیلیش هم اینه که من که دارم ویوی ایجاد رزرو رو از توی ویوی لیست رزروها داخل دیالوگ باز میکنم، خب قبلا document.ready اجرا شده چون ویوی لیست رزرو ها قبلا لود شده
سکریپت رو دیباگ کردم، وقتی دیالوگ رو باز میکنم بخش document.ready مربوط به ویوی ایجاد رزرو اجرا نمیشه
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
یه نکته ای هم که الان متوجه ش شدم اینه که وقتی برای ویوی ایجاد رزرو بالای ویو پراپرتی layout مشخص میکنم و از طریق صفحه لیست رزروها دیالوگ رو باز میکنم، سکریپت document.ready کار میکنه ولی وقتی پراپرتی layout رو برابر با null قرار میدم (که باید برابر null باشه تا چیز اضافه ای به ویو اضافه نشه) و دیالوگ رو باز میکنم document.ready ویوی ایجاد رزرو از کار میوفته
دلیلش چیه؟ :متفکر:
نقل قول: عدم اجرای document.ready در ویو لود شده در jQuery dialog
مشکل حل شد، به خاطر این که layout رو برابر نال قرار میدادم، دیگه این ویو یک صفحه html محسوب نمیشد و استایل ها و سکریپتها براش کار نمیکردن (بعضی وقتا علت ها انقد سادن که اصلا فکرمون سمتشون نمیره)، برای حل مشکلش اومدم یه layout خالی ایجاد کردم که با layout اصلیم تداخلی ایجاد نکنه و توی اون layout براش section های script و style رو تعریف کردم و توی ویو داخل این سکشن ها فایل های مورد نیاز رو اضافه کردم
تشکر از همراهیتون