Code Behind

o O o

New member
../images/Emo20.gif Code Behind

האם כשאומרים Code Behind מתכוונים לכך שאפשר לכתוב קוד צד שרת, או לכך שב VS יש הפרדה בין התצוגה לבין קוד השרת ? אגב, מי שלא עובד ב VS, פשוט כותב את קוד צד השרת שלו באותו קובץ שבו כתוב ה HTML, בתוך תגיות script שלהן המאפיין runat=server. אבל כיצד הוא מקשר פונקציה כזו, לארוע הקלקה על כפתור (נניח) ?
 

nattygur

New member
לישאול יהודים מה מתכוונים ...

לפי דעתי הפרדה של קוד מ HTML. למרות שאני אישית מתנגד לשעטנז הזה, אתה צריך להשתמש ב Atributes של הארועים (OnClick) ולהפנות אותו למתודה שכתבתה. דוגמית :
<script runat="server" language="C#"> private void MyFunc(object sender, System.EventArgs e) { Response.Write("go"); } </script> <form id="Form1" method="post" runat="server"> <asp:Button OnClick="MyFunc" runat="server" ID="h"></asp:Button>​
 

o O o

New member
ראיתי שאני לא היחיד ששאל את זה..

מדוע אתה נגד השעטנז ?
זה לא הרבה יותר ברור ויותר מסודר ? אגב, אם אני הולך לפי הדוגמא שלך, כיצד אני מצמיד לכפתור גם בדיקת לקוח (JS) בעת הלחיצה עליו ?
 

nattygur

New member
התשובה לשאלה הראשונה קיימת

בשאלה השנייה. לערבב את שניהם זה יותר מבלבל. פקדי צד שרת אינם תאגים של HTML , למרות שהם ניראים כך. הם אובייקטים לכל דבר בעלי מאפיינים, מתודות ואירועים. אם תתבונן היטב באירועים שהם חושפים תבחין במספר אירועים שאינם קיימים ב DHTML ובחסרונם של הרבה אירועים אשר קיימים ב DHTML עבור פקדים מקבילים. לכן האירועים שאתה כותב ב HTML עבור פקדי צד שרת הם למעשה אירועי צד שרת בלבד. אם אתה רוצה לתפוס אירועי צד תחנה (למרות שבדרך כלל אין טעם בהם אם אתה עובד עם פקדי צד שרת) אתה צריך להשתמש ב Script ע"מ להפעיל אותם. הפרדה של כל הקוד שרץ בצד שרת לא רק מסדר לוגית את האירועים בצד שרת ובצד תחנה הוא גם מאפשר להפריד את הפיתוח הוויזואלי של הדף מהפיתוח הפונקציונאלי של הדף. גרפיקאי יכול לעצב את הדף בעוד שתכנת יכול ליישם את הפונקציונאליות של הדף בקובץ נפרד. מקווה שעזרתי ...
 

o O o

New member
פיספסת את השאלהה עיקרית ../images/Emo13.gif

אך תודה על התשוב המעמיקה ! כאשר יש לי כפתור צד שרת ואני רוצה לאפשר לו בדיקת צד לקוח, וגם פעולה צד שרת, אז אני כותב את פונקציית צד השרת, ומשייך אותה אליו ע"י (this.ButtonObject.Click += System.EventHandler(this.button_func וע"מ לשייך אליו את בדיקת צד הלקוח, אני מדביק לו פונקציית JS לתוך ה onclick, אל לא ישירות בתוך התג (כי בארוע onclck שבטוח התג הוא מצפה לפונקציית צד שרת). כדי שראיתי, כאשר אין הפרדה בין קוד לויזואליות, אז כותבים את פונקציית צד השרת שאמורה לרות, ישירות בתוך תג ה onclick. כעת השאלה היא, כיצד אני מדביק את פונקציית ה JS ל Onclick בצד לקוח ?
 

o O o

New member
אבלהאופציה הזו דורסת את מה שהיה

לפני כן מוצמד ל onclick, לא ?
 

nattygur

New member
לא, כנראה לא הייתי מספיק ברור

ה OnClick שאתה משתמש בו ב Tag הוא רק לצד שרת. הוספת ה Attribute מוסיפה טיפול לצד תחנה.
 

o O o

New member
../images/Emo45.gif מה ההבדל ?

אם אתה לא עובד עם Code Behind, אז יש לך scrupt runat=server בתוך קובץ ה aspx, שבתוכו י לך פונקצייה מסויימת שתרוץ בשרת. ע"מ להפעיל אותה כשכפתור נלחץ, אז בתוך תג ה <asp:Button> אתה כותב onclick=MyFunction מה שעשית בעצם הוא להצמיד לכפתור את הפונקציה שתרוץ בשרת כאשר הכפתור נלחץ. אבל כאשר אתה מבצע (MyButton.attributes.add('onclick',bla זה בעצם אמור לבצע את אותו הדבר, להצמיד את bla לארוע לחיצת הכפתור. כיצד היא יודע שקודם, כשהגרתי את MyFunction בתוך תג ה <asp:Button> אז התכוונת לפוקנציית צד שרת, וכשהשתמשת ב add, התכוונת לצד לקוח ?
 

nattygur

New member
(MyButton.attributes.add('onclick'

מוסיף קוד לצד תחנה שבגללו יתרחש האירוע בתחנה ולא בשרת.
 

o O o

New member
אבל...

איך הוא יודע לזהות "קוד תחנה" ולא "קוד שרת" ? מבחינתו זה אמור להיות מה שיופעל ברגע הלחיצה על הכפתור, כיצד הוא יכול לדעת אם התכוונת ללקוח או שרת ? ואם אתה בעצם אומר ששימוש ב attributes.add הוא בעצמו, בהגדרה קוד צד לקוח, אז איבדתי אותך
 

nattygur

New member
איבדת אותי

attributes.add מוסיף HTML Attributes ל TAG ולכן בהכרח משפיע על צד תחנה. האירועים שניתן להשתמש בהם ב tag של רכיב שרת (asp:textbox) מגדירים אירועים בצד שרת.
 

o O o

New member
השאלה היא לאיזה תג.. ?

attributes.add לא מוסיף את הקוד לאותו תג asp:Button שאתה בעצמך הכנסת לו Onclick לתוך התג (פונקצית צד שרת)? או שאולי הוא מוסיף את הקוד לתג HTMLי פשוט נשנשלח לתחנה לאחר שעובד בשרת...
 

o O o

New member
בוא נראה אם הבנתי ../images/Emo13.gif

אם אני משייך פונקצייה ל onclick ישירית בתוך תג ה asp:Button הוא מצפה כאן לפונקציית צד שרת, מכיוון שה asp:Button הוא פקד צד שרת. בל אם מתוך קוד צד הרת, אני משתמש ב Attributes.add אם הוא ממיד את הפונקציה החדשה לפקד input type=button רגיל שנשלח ללקוח, ולכן הפונקציה המוצמדת אליו היא צד לקוח ?
 
למעלה