החלפת IFRAME

e y a l b

New member
החלפת IFRAME

יש לי מערכת בנוייה שאני ממיר אותה ל.net יש לי דף שמכיל iframe (טאבים) ויש לי זמן לכתוב את כל העסק מחדש. אני מתלבט בין דף עם multiview שיכיל view של כל דף או לבנות usercontrol לכל טאב תודה אייל
 

yairov

New member
תגובה

אתה יכול לשלב בין השניים: לכתוב UserControl לכל טאב ב-MultiView.
 

Justin Angel

New member
קה פרובלמה מואי צ'יקיטה?

נשאלת השאלה הבאה: אם אתה רוצה שפעולת שינוי הטאב תהיה שקופה למשתמש או שהיא תדרוש PostBack? אם אתה רוצה שהיא תדרוש PostBack באמת תוכל לעבוד עם פקד MultiView וסט כפתורים שכל אחד מהם יגרום ל-ActiveViewIndex של ה-MultiView להשתנות בהתאם. ככה הלקוח בדפדפן שלו לוחץ על כפתור, הלחיצה על הכפתור רצה בחזרה לשרת עם כל הדף, משנה את ה-View הפעיל ב-MultiView והכל חוזר ללקוח מרונדר ויפה. השילוב בין ה-MultiView ובין הסט כפתורים שכל אחד מהם קובע אינדקס אחר ושונה מצדיק לשים את שניהם כחלק מפקד משותף (או Composite Control או User Control) ולהשתמש רק באחד מהם. הפקד עצמו לא מסובך מדי, אבל אם תבחר לכתוב אותו בקוד בלבד (Composite Control) אתה תאבד את היכולת להוסיף Templateים של קוד ASP.Net כ-Viewים. כדי להוסיף Viewים בצורה הזו תצטרך או לרשת את View וליצור את ה-Viewים שלך כ-Custom Controls או לחשוף מחדש יכולת לערוך Templateים. אם אתה רוצה שהפעולה לא תדרוש PostBack והפעולה תתבצע בצורה שקטה מהמשתמש יש לך כמה אפשרויות איך שאני רואה את זה. החלטה נוספת שבשלב הזה תצטרך לקבל הוא האם אתה מעוניין שכל ה-HTML לכל הטאבים ישלחו ללקוח או שאתה מעוניין שהלקוח ידבר עם השרת (בצורה שקטה) ויעביר כל פעם רק את ה-HTML הנדרש להצגה באותו רגע. אם החלטת לשלוח את כל ה-HTML וכל פעם להציג תוכן של טאב אחר אז אנחנו עכשיו פונים לג'אווה סקריפט. תיקח את כל התכנים השונים של כל הטאבים ותכניס כל אחד מהם ל-<div> נפרד (פקד Panel). בצד לקוח, יהיו אלמנטים סטטיים (כפתורים, קישורים, תמונות או כל דבר אחר) עם קישור לאירוע onclick של ג'אווה סקריפט. בלחיצה על הכפתור צד-לקוח <div> אחד יחשף וה-<div> שכרגע חשוף יוסתר. מדובר על קביעה פשוטה של this.style.visiability = none. כאשר הדף מאותחל יש לדאוג שיש בדיוק פקד Panel אחד שהוא עם visibility : inline וכל השאר עם visiability: none. עכשיו, זאת הייתה הדרך המקובלת לעבוד עד עכשיו. אישית, אני חושב שאפשר לעשות משהו הרבה יותר נקי. כן ללעבוד עם ג'אווה סקריפט, אבל לא ללערבב את ההתנהגות ואת הבנייה של הפקד צד-שרת בצורה חצי-גמורה כזו שבלתי אפשרי לתחזק. צריך ליצור פקד אחד כמו שצריך שעושה את כל העבודה הזאת ואפשר לעבוד מולו בצורה שקופה וקלה כמו שנהוג לעבוד מול רכיבים מקצועיים. ליצור אלמנט בשם Tab שיתרנדר לתגית <div> שבתוכה יהיה תוכן שיקלט מהמשתמש (או באמצעות מערך Controls פנימי או באמצעות חשיפת ITemplate שיאפשר הוספת קוד ASP.Net פנימי בעיצוב). ליצור אלמנט בשם Tabs שיכיל מערך של Tabים וירנדר את כולם לצד לקוח. בנוסף Tabs ירנדר גם מערך של כפתורים צד-לקוח שיהיו אחראים לאירוע onclick כמו שתיארנו לעיל. עכשיו אני אקח את זה עוד צעד קדימה - Microsoft AJAX. במקום לפזר את הג'אווה סקריפט בכל מקום (למשל לכתוב Onclick ברנדור של הכפתורים, למשל לקבוע visiability ברנדור צד-שרת, למשל להתחיל לדאוג לתאימות בין הדפדפנים של כל הסיפור הזה) אפשר לעשות משהו הרבה יותר פשוט. אפשר ליצור מה שנקרא Behavior צד-לקוח של Ajax. אותה Behavior עובדת על הקונספט הבא "אני למעשה מחלקה. אבל אני בצד-לקוח ואני בג'אווה סקריפט. אני יורשת ממחלקה בשם Behavior, יש לי קונסטרקטור ודיסקטרקטור, ואני יכולה לחשוף מאפיינים ואירועים, אני גם יכולה להירשם לאירועים של הדפדפן". התפקיד של Behavior כזה כאן לדעתי יהיה מאוד פשוט: להחזיק מערך של Tabים צד-לקוח (שזאת מחלקה צד-לקוח שגם נצטרך לכתוב) ומצביע לפעיל ביניהם. המחלקה צד-לקוח של Tab תאפשר לנו שני דברים: להעלים Tab ולגרום ל-Tab להופיע. באתחול של ה-Behvaior שלנו נעשה כמה דברים: נעלים את כל ה-Tabים, נקבע טאב פעיל (בין אם לפי קביעה של מאפיין צד-שרת או פשוט נבחר את ראשון), נגרום ל-Tab צד לקוח הראשון להיראות למשתמש, והכי חשוב - נירשם לאירוע ה-onclick של כל הכפתורים שלנו. תקשיב טוב מה נאמר כאן כרגע, נרשם לאירוע צד-לקוח. במתודה שנרשמה לאירוע צד-לקוח של onclick (ואותה מתודה להזכירך כתובה בג'אווה סקריפט צד-לקוח) תיקח את ה=Tabשמקושר לאותו כפתור ותשנה ב-Behavior את ה-Tab הפעיל (גם את המאפיין שחושף ה-Behavior, גם תעלים את ה-Tab הקודם וגם תגרום ל-Tab הזה להיראות). אפשר לקחת את זה עוד קדימה - למה בכלל לשלוח ללקוח את כל ה-HTML לכל הטאבים? באמצעות Ajax אפשר לפנות בנונ-שלנטיות של שורה שורת ג'אווה סקריפט אחת לשרת ולבקש ממנו את ה-HTML שאליו טאב מסויים מתרנדר ואז להציג את ה-HTML הזה במקום קבוע. בצד-שרת, נקלוט את הבקשה הזו, ניקח את האלמנט Tab צד-שרת האחד הזה, נפעיל עליו RenderControl ונשלח בחזרה את ה-HTML ללקוח שיציג אותו בתוך <div>.
 

itaysk

New member
נצל"ש - server controls

הזכרת לי משהו שמבלבל אותי תמיד: מה ההבדל בין server control costume control user control composite control ?
 

dino_din

New member
ההבדל הוא שהשאלה הראשונה

בראיונות עבודה היא תמיד על ההבדל בין user control ו- costume control. server control ו- composite control מגיעים קצת יותר מאוחר :) אתה יכול לעשות חיפוש על "user control vs custome control" או "composite control vs server control" אם בא לך לקרוא קצת.
 

Justin Angel

New member
קה פרובלמה מואי צ'יקיטה?

server control מתייחס לכל פקד צד-שרת, שזה אומר WebControls (למשל Label ו-HyperLink) ו-HtmlControls שאלו תגיות HTML רגילות עם המאפיין runat=server. Custom Control מתייחס לכל פקד שאתה בפועל יושב וכותב קוד בנפרד לדף ASP.Net כלשהו. איפהשהו שם הוא צריך לרשת מ-System.Web.UI.Control שנותן לו את היכולת להתווסף לדף ASP.Net כפקד. הרעיון הוא שתוכל לקסטם פקדים קיימים בפריימוורק באמצעות ירושה או ליצור פקד חדש לחלוטין. User Control גם יצירת פקד חדש בנפרד מדף ASP.Net כלשהו, אבל במקום להשתמש בקוד משתמשים ב-Designer ו-Code-behind. Composite Control זה כל פקד שיורש מ-System.Web.UI.CompositeControl. הרעיון מאחורי פקדים כאלו שהם מאפשרים באמצעות קוד ליצור פקד שמאגד בתוכו שני פקדים או יותר. מבחינת הגדרות, מדובר על תת-סוג של Custom Control היות והם נרשמים בקוד בלבד.
 

itzikbs

New member
../images/Emo45.gif וגם טוב להשאר עם IFRAME

סתם עוד אופציה לא רעה - עדיין ניתן לעבוד עם UC רק לעטוף אותם ב ASPX דינאמי ביי איציק ב.
 
למעלה