كيفية تغيير موضوع تطبيق ASP.NET الكلي بشكل ديناميكي؟

StackOverflow https://stackoverflow.com/questions/3099457

  •  29-09-2019
  •  | 
  •  

سؤال

تخيل تطبيق ASP.NET مع العديد من الموضوعات المحددة داخله. كيف يمكنني تغيير موضوع التطبيق الكلي (وليس مجرد صفحة واحدة) ديناميكيًا. أعلم أنه من الممكن من خلال <pages Theme="Themename" /> في web.config. لكني أريد أن أكون قادرًا على تغييره بشكل ديناميكي. كيف أفعل ذلك؟

شكرا مقدما

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك على Page_PreInit كما هو موضح هنا:

protected void Page_PreInit(object sender, EventArgs e)
{
    switch (Request.QueryString["theme"])
    {
        case "Blue":
            Page.Theme = "BlueTheme";
            break;
        case "Pink":
            Page.Theme = "PinkTheme";
            break;
    }
}

نصائح أخرى

إنه إجابة متأخرة جدًا ، لكنني أعتقد أنك ستعجبك ..

يمكنك تغيير موضوع الصفحة في حدث preinit ، لكن ليس لديك صفحة أساسية ..

في Masterpage ، قم بإنشاء منسدلة اسمها DDLTEMA ، بعد ذلك اكتب كتلة الرمز هذه في Global.asax .. انظر كيف يعمل السحر :)

public class Global : System.Web.HttpApplication
{

    protected void Application_PostMapRequestHandler(object sender, EventArgs e)
    {
        Page activePage = HttpContext.Current.Handler as Page;
        if (activePage == null)
        {
            return;
        }
        activePage.PreInit
            += (s, ea) =>
            {

                string selectedTheme = HttpContext.Current.Session["SelectedTheme"] as string;
                if (Request.Form["ctl00$ddlTema"] != null)
                {
                    HttpContext.Current.Session["SelectedTheme"]
                        = activePage.Theme = Request.Form["ctl00$ddlTema"];
                }
                else if (selectedTheme != null)
                {
                    activePage.Theme = selectedTheme;
                }

            };
    }

احتفظ بصفحة أساسية شائعة لجميع صفحات ASP.NET الخاصة بك وتعديل خاصية السمة بين أي حدث بعد PreInit أو قبل Page_Load في الصفحة الأساسية. هذا سيجبر كل صفحة على تطبيق هذا الموضوع. كما في هذا المثال ، اجعل myPage كصفحة أساسية لجميع صفحة ASP.NET الخاصة بك.

public class MyPage : System.Web.UI.Page
{
    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Init += new EventHandler(this.Page_Init);
    }


    private void Page_Init(object sender, EventArgs e)
    {
        try
        {
            this.Theme = "YourTheme"; // It can also come from AppSettings.
        }
        catch
        {
            //handle the situation gracefully.
        }
    }
}

//in your asp.net page code-behind

public partial class contact : MyPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top