PDA

View Full Version : سوال: مشکل با section Scriptsl در Partial تو در تو



abasfar
دوشنبه 28 مرداد 1392, 22:22 عصر
با سلام

من یک masterPage دارم که درونش

@RenderSection("scripts", required: false)


حال با وقتی تو صفحه Index بخوام از اسکریپت استفاده کنم از کد زیر استده میکنم

@section Scripts {}

تا اینجا مشکلی نیست

اما وقتی تو صفحه Index بخوام یک صفحه دیگه رو رند کنم

RenderPartial)"index2");

حال تو index2 نمیتونم به منطقه اسکریپ نویسی دسترسی پیدا کنم

@section Scripts {}

نمیدونم دقیقا باید از چه کدی استفاده کنم

hakim22
دوشنبه 28 مرداد 1392, 22:42 عصر
یک راه اینکه که درون view مادر partial view دوباره یک section تعریف کنید به این صورت :


section scripts {
@RenderSection("scripts", required: false)
}


اصولا اجرا میشه ولی اسکریپتها بعد از رندر نهایی در وسط کدهای HTML پیج در مرورگر قرار میگیرند که هیچوقت درست نیست.

بهتره همیشه کدهای js رو درون view اصلی قرار بدید و کلا درون partial view کد اسکریپت تعریف نکنید. از نظر bundling هم این روش درسته

abasfar
سه شنبه 29 مرداد 1392, 13:04 عصر
ممنون از پاسخ شما
اگه بخوام از روش اولی که فرمودید استفاده کنم که از ان راحتر هم تو خود action مینویسم وقتی رند کرد همون جایی که کد html رند میشه کد جاوا اسکریپت هم رند میشه !!! همان طور که اشاره هم کردید زیاد کار جالبی نیست

اما در مورد دومی:
من یک فرم main دارم که صفحه مدیریتی است حالا برای رفتن به بخش های دیگر دیگه نمیاد واسه هر بخش یک Url بده بلکه تو همان صفحه اصلی مدیریتی action های فرزند را رند میکنه بنابر این واسه هر action view یک کد جاوا اسکریپتی هست که باید لود بشه نمیشه که واسه همشون یک جا جاوا اسکریپت لود کرد

hakim22
سه شنبه 29 مرداد 1392, 15:32 عصر
اگر دقت کنید در این روش که من گفتم :

section scripts {
@RenderSection("scripts", required: false)
}


در صورتی که در layout یک section با نام scripts داشته باشید کدهای جاوااسکریپت شما همیشه در انتهای html قرار میگیره . فقط استفاده ی زیاد از این روش ممکن در آینده عیب یابی رو مشکل کنه وگر در ساختار html مشکلی ایجاد نمیکنه. برنامه اول اسکریپت هارو از View جاری به View مادر و بعد از اون به Layout اصلی منتقل میکنه و در نهایت در جای درستش قرار میگیره.

شما از layout های تودرتو هم میتوانید استفاده کنید. یک layout مادر دارید و چند layout تو در تو که برای هر کنترلر میتوانند جدا تعریف شوند.
اگر به نظر شما این روش برای کار درست نیست نوشتن یک جاوا اسکریپت اختصاصی برای هر اکشن که باید به صورت مجزا لود بشوند هم روش درستی نیست.

abasfar
چهارشنبه 30 مرداد 1392, 10:11 صبح
ممنون از پاسخ شما

تو راهنمایی روش اول این خطا رو میده !

109426

در مورد راهنمایی روش دومی :
فرض کنید یک صفحه نیاز به اعتبار سنجی داره ، یک صفحه دیگه نیاز به Update Ajax داره ، و یک صفحه با jquery کاربر پسند شده و ...
حال شما میفرمایید من همیه این اسکریپ ها رو تو view اصلی بزارم بقیه view فرزند ازش استفاده کنند؟