PracticU

User Controls

בלי כתוביותעם כתוביות
PracticU › קורס ASP.NET › User Controls
מילון מושגים:
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
מתודה - פונקציה המוגדרת בתוך מחלקה ומתארת פעולה שאובייקטים מאותה מחלקה יכולים לבצע.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.

User Controls
פקד משתמש (Web User Control) מאגד כמה רכיבים קיימים לחבילה אחת. בדוגמה נבנה כרטיס ספר שמכיל שם ספר, מחיר ותמונה, כך שאפשר להציג אותו במספר מקומות באתר בלי לכתוב את העיצוב שוב.
בניית הפקד
מוסיפים לאתר פריט מסוג Web User Control. הוא נשמר בסיומת .ascx ויש לו קובץ C# נלווה לקוד צד השרת. בתוך טבלה מוסיפים שני לייבלים, שם הספר ומחיר, ואובייקט תמונה ביניהם. את גובה התמונה מגדירים כדי שכל הכרטיסים יהיו אחידים.
חשיפת מאפיינים
הלייבלים בתוך הפקד פרטיים כברירת מחדל, ולכן מגדירים בקוד הפקד פרופרטיז ציבוריים:
- BookName (מחרוזת) שמחזיר ומעדכן את הטקסט של לייבל השם.
- BookPrice (decimal) שממיר את הטקסט של הלייבל. בקבלה נעשה Convert.ToDecimal, ובשליחה Convert.ToString.
- BookImage (מחרוזת) שמעדכן את ImageUrl של התמונה.
שימוש בפקד
בדף גוררים את קובץ ה-ASCX לתוך ה-Design, וויז'ואל סטודיו מוסיף תגית Register עם המקור (src), שם התגית וקידומת התגית. בתגית של הפקד מגדירים ערכים בעזרת המאפיינים החדשים. כדי לשנות את שם הקידומת למשהו ברור, המרצה שינה את השם ל-MyWebControls.
טעינה דינמית
כשהמספר לא ידוע מראש, למשל תוצאות חיפוש, הפקדים נוצרים בקוד. בלחיצה על כפתור, המתודה Page.LoadControl מקבלת את נתיב ה-ASCX ומחזירה אובייקט מסוג Control, שממירים לסוג BookControl. מעבירים לו את הערכים, מוסיפים אותו לאוסף Controls של פאנל, ומוסיפים בין הפקדים רכיב LiteralControl עם <br/> לרווח.
לתצוגה בטבלה, ב-Page_Load יוצרים TableRow ו-TableCell, מוסיפים את הפקד לתא, ומוסיפים שורה חדשה בכל שלושה תאים (בדיקת i % 3). בשיעור הוכח שההגדרה של הרג'יסטר ב-web.config לא עבדה כשהדף והפקד היו באותה תיקייה, ולכן הפקד הועבר לתיקייה נפרדת.
שימו לב
כאשר רכיב הפקד עצמו מכיל טקסט קבוע, כל מופע מקבל את אותו טקסט. לכן ערכי השם והמחיר נכנסים דרך המאפיינים, ולא כתוב ישירות בתוך הפקד.
בקצרה: פקד משתמש מורכב מכמה רכיבים, חושפים מאפיינים כדי לקבל ערכים, ומוסיפים אותו לדף או יוצרים אותו בקוד.
השיעור הבא בקורס: Error Handling - טיפול בשגיאות

פרקי ההרצאה: User Controls

  1. 00:00

    פקד המורכב מכמה רכיבים

  2. 01:54

    הוספת Web User Control

  3. 02:54

    עיצוב הפקד

  4. 05:57

    תגית Register

  5. 07:15

    מאפייני SRC ו-TagPrefix

  6. 08:55

    הצבת הפקד בדף

תמלול ההרצאה: User Controls

הטקסט המלא של הדקות הראשונות בהרצאה «User Controls» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:23

    בואו נראה דוגמה יכולת מצב שאני בונה חנות ספרים ואני רוצה במספר מקומות באתר שלי להציג מידע לגבי ספר המידע אמור להכיל את שם הספר, אמור להכיל את המחיר ובוא נניח שאמור להכיל תמונה בקשר לספר.

  3. 00:42

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

  4. 01:01

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

  5. 01:22

    כלומר, לבנות רכיב חדש שיש לו לייבל עבור מחיר של ספר, לייבל עבור שם הספר ותמונה עבור התמונה של הספר. ואז אני יכול לקחת את הרכיב הזה ולשכפל אותו כיחידה סגורה בכל מקום באתר, פה אני רוצה בדיוק את העיצוב הזה.

  6. 01:42

    זה חוסך ממני לכתוב את העיצוב הזה שוב ושוב ושוב ושוב. אז בואו נראה איך אני עכשיו בונה רכיב שמסוגל להציג פרטים.

  7. 01:51

    בואו ניקח את הדוגמה של הספר. מה שאני צריך לעשות, דבר ראשון, ולהוסיף לאתר שלי קובץ חדש שנקרא Web User Control. אנחנו רואים אותו פה.

  8. 02:09

    הקובץ הזה זה קובץ בעל סיומת ASCX, C עבור Control. קודם כל ניתן לו שם. קובץ הזה מכיל תגית אחת שנקראת Control יש בה מאפיינים דומים לתגית Page וביחד עם הקובץ הזה יש לנו קובץ C-Sharp שמחזיק את קוד צד השרת כל הקובץ של ה-ASCX נועד בשביל העיצוב והקוד של ה-C-Sharp נועד בשביל קוד צד השרת אז בואו נחשוב מה העיצוב שאנחנו רוצים בואו

  9. 02:54

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

  10. 03:40

    בואו נגדיר עוד לייבל עבור המחיר ובואו נגדיר ביניהם אובייקט תמונה. קודם כל, דבר ראשון, בנינו פה את העיצוב עצמו של הרכיב.

  11. 04:18

    ובמקום לשכפל לכל מקום שהייתי רוצה להציג שם ספר, תמונה של הספר ומחיר, כל מה שהייתי צריך לעשות זה להגדיר את הפקד החדש שאנחנו בונים ו-sb.net תשכפל עבורנו את הקוד הזה.

  12. 04:34

    נגדיר רק שהתמונה בעלת מימדים גבוהים. אוקיי, בואו נסתכל איך זה מיוצג. אם אני עובר לדיזיין, אז אני רואה שיש לי מעין רכיב סטנדרטי או עיצוב סטנדרטי של טבלה.

  13. 05:06

    אני רואה פה Label שנקראת lbl.book.name, אני רואה את התמונה של הספר שאמורה להיות ואני רואה את lbl.book.price. אוקיי, עדיין לא שמתי את הפקד הזה על דף.

  14. 05:25

    אז אנחנו הולכים עכשיו לשים את הפקד הזה על אחד הדפים. נגדיר רק את ההייט 180 ויותר פרופורציונלי. אוקיי, בואו נלך עכשיו לדף ונראה איך אני מגדיר את הרכיב הזה על גבי הדף.

  15. 05:49

    הרכיב הזה נמצא בקובץ BookControl.ascx. דבר ראשון, מה שאני צריך לעשות זה להכיל תגית מיוחדת שנקראת תגית רג'יסטר, בדומה לפעילות הרכיבים הקודמים שלמדנו, שמאפשרת לדף לדעת איפה הרכיב הזה נמצא, ואז רק אני אוכל להשתמש איתו בקוד שלי.

  16. 06:21

    את התגית הזאת אני יכול להגדיר בראש כל דף, או שאני יכול להגדיר אותה פעם אחת ב-Web Config, וזה פותר לי את הבעיה עבור כל הדפים. בואו נראה קודם כל איך אני מגדיר את זה בראש הדף.

  17. 06:31

    אז השיטה פשוטה, במקום לכתוב את זה, אני פשוט הולך לאזור ה-Design של הדף, לוקח מחלונית ה-Solution Explorer את קובץ ה-ASCX, וגורר אותו לתוך הדף שלי ועוזב.

  18. 06:50

    ברגע שעשיתי את זה, ויז'ל סטודיו, אם אני מסתכל בסורס של הדף, כתבה לי פה למעלה את תגית הרג'יסטר. בואו נסתכל מה המאפיינים שכתובים בתגית הרג'יסטר.

  19. 07:04

    דבר ראשון, אני רואה מאפיין שנקרא src. src מחזיק לי את המיקום של קובץ ה-ascx בפרויקט שלי. לאחר מכן tag name מחזיק לי את שם התגית ו-tag prefix מחזיק לי את קידומת התגית.

  20. 07:27

    בנוסף אני רואה כאן כבר AFPX, בקובץ ה-AFPX שלי אני רואה קונטרול אחד שנכתב לי. בואו נסתכל עוד פעם מה ההבדל בין tag prefix לבין tag name.

  21. 07:43

    אם הייתי משתמש ב-asp.2.textbox, רכיב סטנדרטי של asp.net, ESP זה הפרפיקס, זה הקידומת של הרכיב שלנו. טקסט בוקס זה השם שלו. לכן, טאג פרפיקס זה הקידומת שניתנת עבור הרכיב החדש שלנו.

  22. 08:04

    טאג ניים זה השם של הרכיב. קונטרול נשמע לי מאוד מאוד סביר והגיוני. UC1 נראה לי קצת לא ברור. UC, קיצור של יוזר קונטרול. אז בואו נחליף ל-UC1 את השם ל-MyWebControls.

  23. 08:31

    ולכן יש לנו פה את התחילית my web controls ושם יש לי book control כעת לדף שלי יש control אחד שמתאר ספר כמובן שיכלתי לשכפל אותו ולהחזיק כל מיני קונטרולים כאלה על הדף בואו נסתכל נראה שכעת הדף שלנו אמור להכיל שני רכיבים בואו נריץ את זה ואכן אנחנו רואים שני רכיבים שאמורים לתאר ספר שנמצאים לי על הדף כמובן אני לא רואה מידע לגבי הרכיבים מפני שהמידע הריק ואני

  24. 09:31

    באמת רואה מקום של תמונה שאמור להיות כאן וכאן. אוקיי, בואו נסתכל עכשיו איך אני מגדיר את המידע שהרכיב אמור להציג.

  25. 09:45

    אם אני מסתכל מבחינת קובץ ה-ASCX, קובץ ה-ASCX זה הרכיב עצמו והאובייקט החדש שבניתי או הרכיב החדש שבניתי. הוא יודע להחזיק מידע לגבי ספר אחד אבל הוא כמובן לא אמור לדעת מה המידע של הספר,

לקורס המלא: קורס ASP.NET אונליין

ההרצאה הקודמת: Control Inheritance - הורשת פקדים

ההרצאה הבאה: Error Handling - טיפול בשגיאות

הרצאות קשורות מקורסים אחרים

  • Dynamic Controls
  • USER MODULE
  • רכיבים נפוצים - Common Controls
  • תרגול לפרק של User Input

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio