PDA

View Full Version : سوال: تغيير themr فايل masterpage در زمان اجرا



Z.Abdollahi
یک شنبه 28 فروردین 1390, 15:23 عصر
با سلام
ساختار كلي صفحه من بدين صورته كه يك سري آيتم بالاي صفحه دارم كه ثابت هستن روي هر كردوم كه كليك بشه يه سري تب شامل يوزر كنترل ها پايين صفحه لود ميشه. مي خوام به نسبت هر آيتمي كه انتخاب شده تب ها و محتويات يوزركنترل ها يه تم خاص داشته باشه.
را هايي كه براي پياده سازي به نظر ميرسه اينهاست:
تو رويداد كليك اون آيتم تم صفحه رو عوض كنم. مشكل اين روش اينه كه اون آيتم هاي بالايي بالطبع داخل مسترپيج قرار مي گيرن و به مسترپيج هم كه نميشه به طور مستقيم تم اعمال كرد يا اگه روشي براي اينكار وجود داره من نميدونم.
روش دوم اينه كه صفحه ها رو تفكيك كنم و به هر صفحه تم خاص خودش رو بدم اما اشكال اين روش هم اينه كه بعضي صفحه ها بين دو تا از آيتم ها مشتركند.
دوستان نظر ديگه اي هم دارند؟
در ضمن براي تغيير تم فقط اجراي دستور زير كفايت مي كنه؟

Page.Theme = "Blue";

Roia_del
دوشنبه 29 فروردین 1390, 08:32 صبح
سلام ، تم رو شما نمی تونی تو مستر پیج تغییر بدی ولی توی Page چرا .
تابع زیر عمل تغییر Theme رو در Page انجام میده .



void Page_PreInit(object sender, System.EventArgs args)
{
Page.Theme = "Web";
}



در اینصورت شما باید این کد رو تو کد همه صفحاتت اضافه کنی ولی می تونی یه کلاس بسازی فرضا NewPage و از System.Web.UI.Page ارث ببری و تو اون کلاس کد بالا رو کپی کنی و تو همه کلاس های صفحاتت
به جای :



public class className:System.Web.UI.Page



بنویسی :




public class className:NewPage

Z.Abdollahi
دوشنبه 29 فروردین 1390, 13:13 عصر
اين راهيست كه خودم پيدا كردم و جواب هم گرفتم. اول يه كلاس تعريف كردم به نام BasePage كه اين كد داخلش هست:


public class BasePage:System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
if (Request.Form != null && Request.Form.Count > 0)
{
if (Request.Form[this.Master.FindControl("btnEntities").UniqueID] != null)
this.Theme = "Blue";
else if (Request.Form[this.Master.FindControl("btnSupervise").UniqueID] != null)
this.Theme = "DarkBlue";
else if (Request.Form[this.Master.FindControl("btnMaintenance").UniqueID] != null)
this.Theme = "Brown";
else if (Request.Form[this.Master.FindControl("btnCRM").UniqueID] != null)
this.Theme = "Yellow";
else if (Request.Form[this.Master.FindControl("btnHumanRes").UniqueID] != null)
this.Theme = "DarkGray";
else if (Request.Form[this.Master.FindControl("btnReports").UniqueID] != null)
this.Theme = "Gray";

}
}
}

تمام فرم هايي كه ساخته مي شوند به جاي اينكه از System.Web.UI.Page ارث بري كنند از همين كلاس BasePage ارث مي برند.
مشكل اولم حل شد. اما يه مشكل ديگه دارم. نمي دونم چرا وقتي تم عوض ميشه محتويات فايل .skin اعمال نميشن ولي محتويات فايل css اعمال مي شن.