none
איך ניתן לשנות את התוכן של הlayout בזמן ריצה? RRS feed

  • שאלה

  • יש לי אפליקציית asp.net mvc, ובפרויקט יש layout - _layout.chtml, ברצוני לשנות את התוכן שלו בזמן ריצה, זה אפשרי?

    לדוגמא, כרגע התוכן של ה_layout.chtml:

    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>      
        @RenderBody()
    </body>
    </html>

    ואני רוצה לקחת את התוכן מאיזשהו קובץ שאני מאחסן בשרת ולהחליף את התוכן של ה_layout בתוכן הבא:

    <!DOCTYPE html>
    <html>
    <head>
    <title>My Title</title>
    <link href="~/css/mycss.css" rel="stylesheet" />
    </head>
    <body>   
        @RenderPage("../Shared/_Header2.cshtml")    
        @RenderBody()
        @RenderPage("../Shared/_Footer2.cshtml")
    
        <script src="~/scripts/jquery.js"></script>
        <script src="~/scripts/angular.js"></script>
        @RenderSection("scripts", required: false)
    </body>
    </html>
    איך אפשר לעשות את זה בזמן ריצה?

    יום שני 09 מרץ 2015 08:57

תשובות

  • אני חושב שזו לא דרך טובה.

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

    לי נראה יותר להפנות בצורה דינמית לתצוגה אחרת, גם כזו שנוצרת בזמן ריצה ואפי' ממסד נתונים. ראה: ASP.NET MVC and virtual views

    או הפניה מותנית בקונרולר ראה כאן: Rendering Layouts Based on a Condition in ASP.Net MVC


    • נערך על-ידי לומדים יום שני 09 מרץ 2015 09:31
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 מרץ 2015 11:44
    יום שני 09 מרץ 2015 09:30
  • ערב טוב,

    תחילה צריך להגיד שהכל אפשרי.

    תמיד התשובה לשאלה "האם אפשר" בתכנות, זה כן. השאלה היא רק כיצד והאם יש לנו את המשאבים לביצוע (משאבים כוללים גם ידע כמובן)

    לעצם השאלה למעשה לא ממש הבנתי היכן נתקלת בבעיה.

    כל הרעיון של שימוש ב Layout הוא לעשות שימוש בתבנית מוכנה מראש. אם אתה רוצ ה דינמיות מלאה אז אתה פשוט לא צריך לעבוד עם תבנית :-)

    לעומת זאת, אם אתה רוצה לעבוד עם כמה תבניות ולבחור בינהם בצורה דונאמית, אז במקום לקבוע קוד XXX תקבע את הקוד בצור דינאמית בדיוק כמו כל קוד אחר. למשל אתה יכול לייצר כמה תבניות מראש ובעזרת תנאי IF פשוט לבחור את התבנית המתאימה (למשל למשתמישם מסויימים להציג תבנית X ולאחרים תבנית Y). אפשרות נוספת זה לעבוד לנהל את התכנים דרך ה ActionResult

    תעבור על הקישור הבא, הוא כולל מספר שיטות ורעיונות:

    http://www.dotnet-tricks.com/Tutorial/mvc/3WDE140613-Different-ways-of-rendering-layouts-in-Asp.Net-MVC.html

    אני מקווה שזה עונה על הצרכים שלך :-)

    אם לא אז אנא נסה להביהר שוב.

    * עוד קישור נחמד של פרויקט מוכן אפשר לראות כאן:
    http://www.codeproject.com/Articles/383145/RenderBody-RenderPage-and-RenderSection-methods-in


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Moderator יום שני 09 מרץ 2015 15:41
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 מרץ 2015 11:44
    יום שני 09 מרץ 2015 15:39
    מנחה דיון

כל התגובות

  • אני חושב שזו לא דרך טובה.

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

    לי נראה יותר להפנות בצורה דינמית לתצוגה אחרת, גם כזו שנוצרת בזמן ריצה ואפי' ממסד נתונים. ראה: ASP.NET MVC and virtual views

    או הפניה מותנית בקונרולר ראה כאן: Rendering Layouts Based on a Condition in ASP.Net MVC


    • נערך על-ידי לומדים יום שני 09 מרץ 2015 09:31
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 מרץ 2015 11:44
    יום שני 09 מרץ 2015 09:30
  • ערב טוב,

    תחילה צריך להגיד שהכל אפשרי.

    תמיד התשובה לשאלה "האם אפשר" בתכנות, זה כן. השאלה היא רק כיצד והאם יש לנו את המשאבים לביצוע (משאבים כוללים גם ידע כמובן)

    לעצם השאלה למעשה לא ממש הבנתי היכן נתקלת בבעיה.

    כל הרעיון של שימוש ב Layout הוא לעשות שימוש בתבנית מוכנה מראש. אם אתה רוצ ה דינמיות מלאה אז אתה פשוט לא צריך לעבוד עם תבנית :-)

    לעומת זאת, אם אתה רוצה לעבוד עם כמה תבניות ולבחור בינהם בצורה דונאמית, אז במקום לקבוע קוד XXX תקבע את הקוד בצור דינאמית בדיוק כמו כל קוד אחר. למשל אתה יכול לייצר כמה תבניות מראש ובעזרת תנאי IF פשוט לבחור את התבנית המתאימה (למשל למשתמישם מסויימים להציג תבנית X ולאחרים תבנית Y). אפשרות נוספת זה לעבוד לנהל את התכנים דרך ה ActionResult

    תעבור על הקישור הבא, הוא כולל מספר שיטות ורעיונות:

    http://www.dotnet-tricks.com/Tutorial/mvc/3WDE140613-Different-ways-of-rendering-layouts-in-Asp.Net-MVC.html

    אני מקווה שזה עונה על הצרכים שלך :-)

    אם לא אז אנא נסה להביהר שוב.

    * עוד קישור נחמד של פרויקט מוכן אפשר לראות כאן:
    http://www.codeproject.com/Articles/383145/RenderBody-RenderPage-and-RenderSection-methods-in


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Moderator יום שני 09 מרץ 2015 15:41
    • סומן כתשובה על-ידי Eran Sharvit יום שלישי 10 מרץ 2015 11:44
    יום שני 09 מרץ 2015 15:39
    מנחה דיון
  • אני רוצה לחד נקודה אחת,

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

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שני 09 מרץ 2015 17:02
    מנחה דיון