كيفية تغيير موضوع تطبيق ASP.NET الكلي بشكل ديناميكي؟
سؤال
تخيل تطبيق 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)
{
}
}