PDA

View Full Version : انتخاب MasterPage بر اساس Cookie



bahar_engineer
شنبه 12 دی 1388, 08:31 صبح
سلام

من یه سایت ساختم که 4 تا مسترپیج داره . لازمه برخی صفحات سایت بر اساس انتخاب کاربر با یکی از مسترپیج ها هر بار بالا بیاد

مثلا اگه کاربر شرکت پرتو فام رو انتخاب کرد مسترپیج مربوط به اون توی صفحه اصلی بیاد و اگه پرتو آرا رو انتخاب کرد مسترپیج مربوط به پرتو آرا توی صفحه اصلی قرار بگیره

در این مورد مشکلی نیست اما موضوع اینه که اسم شرکت رو من موقع کلیک روی عکسش توسط کوکی ذخیره می کنم و توی صفحه اصلی اون کوکی رو مقدارش رو بدست می آرم و شرط می ذارم که اگه فلان شرکت بود فلان مسترپیج

اما قاطی می کنه ... مثلا اولش درست می آره اما تو یه صفحه دیگه که می رم دوباره بر می گرده به حالت پیش فرض . حالتی که گفتم اگه کوکی موجود نبود اونو بیار

یعنی کوکی از بین می ره!!!!؟؟؟ اما اگه چند تا کلیک دیگه بکنم چند تا صفحه دیگه باز کنم دوباره بعضی هاشون مسترپیج درست رو نشون می دن

اونطوری هم نیست که ثابت باشه که بگم کد اون صفحات مشکل داره ... گاهی این صفحه مشکل داره گاهی اون یکی صفحه

چه راهی پیشنهاد می کنید که این مشکل پیش نیاد؟

Mostafa_Dindar
شنبه 12 دی 1388, 12:17 عصر
مراحلي رو كه ميگم انجام بده مشكلي پيش نمياد (براي انتخاب زبان هم ميتوني از اين روش استفاده كني):

ابتدا براي انتخاب مستر پيج پيش فرض ميتوني در رويداد Application_BeginRequest چك كني ببيني Cookie مورد نظر مقدار داره يا نه و اگه نداره اون رو برابر مستر پيج دلخواه قرار بدي .

protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Cookies["PreferedMaster"] == null)
{
HttpCookie Master = new HttpCookie("PreferedMaster");
Master .Value = "Partofam";
Master .Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(Master);

}
if (Request.Cookies["PreferedMaster"] != null)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.Cookies["PreferedMaster"].Value);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.Cookies["PreferedMaster"].Value);
}
}

در يك UserControl به تعداد MasterPage ها Button/ImageButton/LinkButton و يا هرچيز ديگه اي كه Command Argument داشته باشه به دلخواه بزار . خاصيت Command Argument اون رو
نام MasterPage هاي قابل انتخاب بزار .و رويداد onCommand همشون رو يكي تنظيم كن مثلا SelectMaster . حالا در يك رويداد مورد نظر Command Argument اونا رو هندل ميكنيم :


protected void SelectMaster_Click(object sender, CommandEventArgs e)
{
HttpCookie Master = new HttpCookie("PreferedMaster");
Master.Value = e.CommandArgument.ToString();
Master.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(Master);
Response.Redirect("~/Default.aspx");
}اينطور هر وقت كاربر MasterPage دلخواه رو عوض كرد تا زماني كه Cookie تو كامپيوترش از بين نره هر وقت به سايت شما سر بزنه آخرين مستر پيج اي كه انتخاب كرده براش مياد .

از اين روش براي انتخاب زبان هم ميتونيد استفاده كنيد

در اين پست هم يك روش براي انتخاب MasterPage بر اساس Role گفته شده (http://barnamenevis.org/forum/showthread.php?t=197591) ولي توصيه ميشه كه از Theme ها براي انتخاب Layout استفاده شه .