PDA

View Full Version : سوال: تغییر Master Page



javadaghaiy
جمعه 11 دی 1388, 11:36 صبح
با عرض سلام

من مخوام در زمان اجرا مسترپيچم را عوض كنم.
يعني:
يه صفحه وب دارم كه بين چند مستر پيچ مشتركه حالا مي خوام بدونم چطوري مي شه بدون اينكه چند تا كپي از اين صفحه بگيرم و به مستر پيچ جداگانه ربط بدم در زمان اجرا همين صفحه باشه مستر پيجش تغيير كنه اگه مي شه و امكان داره يه راهنماي منو مهمون كنين.
ممنون:لبخند:

*unos*
جمعه 11 دی 1388, 11:45 صبح
ببین این به کارت می یاد
http://www.codeproject.com/KB/aspnet/Changing_Master_Page.aspx

اوبالیت به بو
جمعه 11 دی 1388, 13:32 عصر
يه صفحه وب دارم كه بين چند مستر پيچ مشتركه
یعنی چی؟
یعنی 1 صفحه وب از چند MasterPage استفاده می کنه؟

javadaghaiy
جمعه 11 دی 1388, 19:32 عصر
یعنی چی؟
یعنی 1 صفحه وب از چند MasterPage استفاده می کنه؟


درسته.
ولي من چون راحل ديگه اي نداشتم چند صفحه (كپي شده از يك صفحه)كه هيچ تغييري نسبت به هم ندارند را در زمان طراحي هر كدام را به مستر خودش ربط دادم حالا صفحاتم زياد شده . و مديريت آن سخته. گفتم اگه راحلي هست كه يه صفحه رو نگه دارم و بقيه رو حذف كنم و در زمان اجرا آنها را تغيير دهم.

مشكلي نداره در آينده

javadaghaiy
جمعه 11 دی 1388, 19:45 عصر
ببین این به کارت می یاد
http://www.codeproject.com/KB/aspnet/Changing_Master_Page.aspx



سلام دوست عزيز ممنون

من چهارتا مستر دارم و يه كاربر كه وارد مي شه مثلا صفحه الف با مستر 1 را نمايش مي ده حالا يه كاربر ديگه وارد مي شه و بايد از مستر 2 استفاده كنه به دليل نوع كاربري. ولي صفحه وب همان صفحه الفبايد باشه اينبار با مستر 2 و اين براي چهار نوع كاربر تكرار مي شه.

حالا سئوال: اين كد شما جواب مي ده ضمنا در صورت امكان يه توضيحي بدين . ممنون مي شم

Mostafa_Dindar
جمعه 11 دی 1388, 20:07 عصر
سلام
در رويداد PreInit ميتوني MasterPage رو به صورت دايناميك انتخاب كني .به صورت زير:



protected void Page_PreInit(object sender, EventArgs e)
{
this.MasterPageFile = "~/OtherMasterPage.master";
}
ولي اين رو بايد مد نظر داشته باشي كه همه ContentPlaceHolder ها ID يكساني داشته باشند .

اگر بخواي بر اساس Role كابران MaterPage متناسب خودشون رو داشته باشند و همچنين به دلايل ديگه ميتوني يك كلاس مثل BasePage ايجاد كني و همه Page هات از اون ارث ببره . در اين صورت كار تكراري نداري و تنها كافيه دستورات شرطي رو تنها يكجا بنويسي .
ولي به طور كلي پيشنهاد ميشه كه از Theme براي انتخاب Layout سايت استفاده بشه تا MaterPage
موفق باشيد

javadaghaiy
جمعه 11 دی 1388, 21:13 عصر
ببین این به کارت می یاد
http://www.codeproject.com/KB/aspnet/Changing_Master_Page.aspx



سلام دوست عزيز ممنون

من چهارتا مستر دارم و يه كاربر كه وارد مي شه مثلا صفحه الف با مستر 1 را نمايش مي ده حالا يه كاربر ديگه وارد مي شه و بايد از مستر 2 استفاده كنه به دليل نوع كاربري. ولي صفحه وب همان صفحه الفبايد باشه اينبار با مستر 2 و اين براي چهار نوع كاربر تكرار مي شه.

حالا سئوال: اين كد شما جواب مي ده ضمنا در صورت امكان يه توضيحي بدين . ممنون مي شم

اوبالیت به بو
جمعه 11 دی 1388, 21:45 عصر
ولي اين رو بايد مد نظر داشته باشي كه همه ContentPlaceHolder ها ID يكساني داشته باشند .

اگر بخواي بر اساس Role كابران MaterPage متناسب خودشون رو داشته باشند و همچنين به دلايل ديگه ميتوني يك كلاس مثل BasePage ايجاد كني و همه Page هات از اون ارث ببره . در اين صورت كار تكراري نداري و تنها كافيه دستورات شرطي رو تنها يكجا بنويسي .
ولي به طور كلي پيشنهاد ميشه كه از Theme براي انتخاب Layout سايت استفاده بشه تا MaterPage
موفق باشيد
جالب شد. ادامه بدید لطفاً. مثال...

Mostafa_Dindar
جمعه 11 دی 1388, 21:59 عصر
جالب شد. ادامه بدید لطفاً. مثال...

يك Base كلاس مينويسيم كه از System.Web.UI.Web ارث ميبره و رويداد OnPreInit اون رو
OverRide ميكنه.به صورت زير :
public class BasePage : System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
//Implement your logic Like :
bool isModerator = (this.User.IsInRole("Administrators") || this.User.IsInRole("Editors") || this.User.IsInRole("Moderators"));
if (isModerator)
this.MasterPageFile = "~/Admin.master";
else
this.MasterPageFile = "~/Site.master";
base.OnPreInit(e);
}
}


حال تنها كافيه درهر وقت كه يك WebForm ايجاد ميكنيم به جاي اينكه از System.web.UI.Page ارث ببره از BaseClass خودمون ارث ببره .( كه كلاس خودمون باز از System.web.UI.Page ارث برده)
يعني به جاي اينكه بنويسيم :


public partial class Default1 : System.Web.UI.Page
{مينويسيم :

public partial class Default1 : BasePage