PDA

View Full Version : مشکل masterpage با javascript



blackcats
پنج شنبه 10 تیر 1389, 17:31 عصر
سلام
من در حال طراحی سایتی هستم که تعدادی صفحه داره که از masterpasge قسمتی از صفحشونو به ارث میبرن کار میکنم.
حالا مشکل اینجاست که در صفحه ای که میخوام مثلا مقدار یه textbox رو با استفاده از جاوا خالی کنم با ارور روبرو مواجه شدم(textbox در صفحه content هست)

Message: 'document.form1.TextBox1' is null or not an object

اصلا بخاطر اینکه بتونم کد های جاوا رو مستقیم از خود contentpage بخونم باید چیکار کنم.
کد های جاوای من در یک فایل js هست که ضمیمه شده به mastrepage.
چیکار باید بکونم که object هارو از صفحه فعلی بخونه نه از masterpage.
در ضمن من تازه جاوا یاد گرفتم.

pestilencia
پنج شنبه 10 تیر 1389, 19:19 عصر
۱) جاوا و جاوااسکریپت با هم تفاوت دارن
۲) کدی که خطا ایجاد کرده رو اگه بذاری بهتر می‌شه فهمید ایراد کجاست

blackcats
پنج شنبه 10 تیر 1389, 22:03 عصر
حق با شما است بخاطر تنبلی javascript رو مختصر نوشتم!!!!!!!
error رو گذاشتم


Message: 'document.form1.TextBox1' is null or not an object

azmoodeh
پنج شنبه 10 تیر 1389, 22:24 عصر
سلام
من ذقيقا نميدونم چرا جاوا اسكريپت ها رو درون Content Page نمي بريد ؟ چون وقتي ميره توي مسترپيج اين منطق كه كدوم textBox مربوط به كدوم ContentPage بايد روش كاري انجام بشه يك مقدار سخت تره
لطفا دقيقا توضيح بديد كه طراحي شما براي كارتون چيه ؟
اما براي نمونه مي تونيد كد زير رو توي contentpage اضافه كنيد :


<script type=text/javascript>
<%=Textbox1.ClientID%>. value='';
</script>

pestilencia
پنج شنبه 10 تیر 1389, 22:46 عصر
من ذقيقا نميدونم چرا جاوا اسكريپت ها رو درون Content Page نمي بريد ؟


نوشتن کد جاوااسکریپت و همچنین سی‌اس‌اس به صورت مستقیم (Hard Coding) داخل صفحات وب *اشتباه*ه.

به خاطر اینکه اولا امکان خطا رو بالا و Persistency رو از بین می‌بره. سرعت لود شدن صفحات رو هم کم‌تر می‌کنه.
کما اینکه تو اکثر پروفایلر‌های صفحات وب یه گزینه داره که Embedded Javascript and Css رو بهتون تذکر می‌ده که اصلاح کنین.



چون وقتي ميره توي مسترپيج اين منطق كه كدوم textBox مربوط به كدوم ContentPage بايد روش كاري انجام بشه يك مقدار سخت تره


هر چیزی، آسون‌ترش الزاما هم بهتر نیست. سه راه حل بسیار خوب برای به دست آوردن DOM Object هست، یکی با IDش، یکی با Nameش یکی با Classش. چرا سخت باشه، *اگه* اسم‌گذاری‌هاتون یه منطق درست رو طی کرده باشه؟

Blackcats جان، این اررور رو تو پست اول هم گذاشته بودی، از رو این نمی‌شه فهمید کجای کدی که نوشتی ایراد داره. ممکنه اشتباه تایپی باشه صرفا، یا اشتباه تو Scope باشه یا ...
به هر ترتیب، وقتی داره دنبال DOM Objectه form1.TextBox1 می‌گرده پیداش نمی‌کنه. اچ‌تی‌ام‌ال و جاوااسکریپتی رو که نوشتی قرار بده.

blackcats
پنج شنبه 10 تیر 1389, 23:21 عصر
بزار یکم بیشتر یا بهتر توضیح بدم:

یک فایل js دارم داخلش کد زیره:

function free()
{
document.form1.TextBox1.value="";
}
اینجا دو تا سوال مطرح میشه اول اینکه فایل js رو من کجا باید attach کنم(صفحات من از masterpage به ارث میرسن) پس تا اونجاییکه میدونم فقط داخل masterpage میشه این کارو کرد اگر داخل content میشه راهنماییم کن(منظورم از content صفحاتبه ارث رسیده از mastepage!!!)
من فایلمو داخل maste ، attach کزدم حالا function که تعریف کردمو free() رو که فراخوانی میکنم کار نمیکنه چون textbox1 ؛ object هست که داخل mastepage نیست داخله content هست و برنامه هم نمیدونه برای کدوم content هست

Vahid_moghaddam
پنج شنبه 10 تیر 1389, 23:27 عصر
سلام
من در حال طراحی سایتی هستم که تعدادی صفحه داره که از masterpasge قسمتی از صفحشونو به ارث میبرن کار میکنم.
حالا مشکل اینجاست که در صفحه ای که میخوام مثلا مقدار یه textbox رو با استفاده از جاوا خالی کنم با ارور روبرو مواجه شدم(textbox در صفحه content هست)

Message: 'document.form1.TextBox1' is null or not an object

اصلا بخاطر اینکه بتونم کد های جاوا رو مستقیم از خود contentpage بخونم باید چیکار کنم.
کد های جاوای من در یک فایل js هست که ضمیمه شده به mastrepage.
چیکار باید بکونم که object هارو از صفحه فعلی بخونه نه از masterpage.
در ضمن من تازه جاوا یاد گرفتم.

content page به لینک های اضافه شده به master page دسترسی داره. چون این دو تا با هم ترکیب می شن و اگه به source code صفحه نگاه کنید، می بینید که رفرنس ها به صفحه اضافه شدن. مشکل شما به احتمال زیاد به خاطر تغییر id کنترل هاست. asp.net در مواردی مثل قرار گرفتن کنترل در gridview یا در master page، تغییراتی رو در id کنترل ها بوجود میاره. شما به جای id تعریف شده در کد نویسی سمت کلاینت باید از client id استفاده کنید. برای دسترسی به کنترل ها هم استفاده از document.getElementById و یا selector های jquery روش راحت تری هست.

blackcats
جمعه 11 تیر 1389, 00:06 صبح
از دوستان عزیز ممنون راست گفتید روش انتخابی من شاید نادرست بود اما جواب کارمو از لینک زیر گرفتم مطمئن هستم به دردتون میخوره

http://www.codeproject.com/KB/scripting/Masterpage-Javascript.aspx

azmoodeh
جمعه 11 تیر 1389, 01:09 صبح
نوشتن کد جاوااسکریپت و همچنین سی‌اس‌اس به صورت مستقیم (Hard Coding) داخل صفحات وب *اشتباه*ه.

به خاطر اینکه اولا امکان خطا رو بالا و Persistency رو از بین می‌بره. سرعت لود شدن صفحات رو هم کم‌تر می‌کنه.
کما اینکه تو اکثر پروفایلر‌های صفحات وب یه گزینه داره که Embedded Javascript and Css رو بهتون تذکر می‌ده که اصلاح کنین.



هر چیزی، آسون‌ترش الزاما هم بهتر نیست. سه راه حل بسیار خوب برای به دست آوردن DOM Object هست، یکی با IDش، یکی با Nameش یکی با Classش. چرا سخت باشه، *اگه* اسم‌گذاری‌هاتون یه منطق درست رو طی کرده باشه؟

Blackcats جان، این اررور رو تو پست اول هم گذاشته بودی، از رو این نمی‌شه فهمید کجای کدی که نوشتی ایراد داره. ممکنه اشتباه تایپی باشه صرفا، یا اشتباه تو Scope باشه یا ...
به هر ترتیب، وقتی داره دنبال DOM Objectه form1.TextBox1 می‌گرده پیداش نمی‌کنه. اچ‌تی‌ام‌ال و جاوااسکریپتی رو که نوشتی قرار بده.

دوست عزيز
من بيشتر از اينكه روش ارائه بدم در اين پست دليل كار رو مي خواستم متوجه بشم
به نظر شما اگه بخوايم يك textbox توي يك Content Page خاص رو تغيير بديم آيا بايد كد جاوا اسكريپتش توي همه Content page از طريق Master Page بياد؟ عاقلانه است؟
من هم مي خواستم اين دوستمون دقيقا هدفش رو بيان كنه تا بهترين راه حل بهش ارايه بشه
ضمن اينكه من نگفتم Hard Coding كنه توي صفحه ، مي تونه كار خودش رو توي يك .JS انجام بده و لينكش رو فقط در ContentPage مورد نظرش اضافه كنه
در مورد كار سخت و آسون هم باز اشاره ميكنم كه من نياز دوستمون رو ازش پرسيدم . دليلي نداره براي هر كار كوچك و موردي راه حلهاي كلي و طولاني ارايه بشه . شايد با 2 خط جاوا اسكريپت اين مشكل حل ميشد . اونوقت شما مي خواستيد يه Function طولاني براي اين كار نوشته بشه كه هم وقتش رو ميگرفت و هم حجم صفحاتش رو بالا ميبرد
حالا خدا رو شكر به لطف راهنمايي هاي ارزنده ي شما مشكلشون حل شد !!