PDA

View Full Version : سوال: مشکل این کد چیه ؟ :(



fahmari
سه شنبه 26 دی 1391, 18:00 عصر
سلام
این کدها مال صفحه لاگینه، که اظلاعات کاربر تو سشن ها ذخیره میشه:


protected void LoginButton_Click(object sender, ImageClickEventArgs e)
{
DataClasses1DataContext LinqLogin = new DataClasses1DataContext();
int i = LinqLogin.SP_Login(txtEmail .Text ,txtPass .Text );
if (i == 1)
// کاربر وجود دارد پس باید نام او به جای ورود قرار گیرد
{
Session.Add("Status", true);
Session.Add("HashPass", System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(txtPass.Text, "MD5").ToString());
Session.Add("CurrentUser", txtEmail.Text);


}
else if (i == 0)
// کاربر وجود ندارد پیغام مناسب صادر شود

{


* البته این کدها فعلا ناقصه دوستان! تازه دارم می نویسمش. فقط یه مشکلی هست!
می خوام وقتی کاربر لاگین کرد، لینک های بالای صفحه تغییر کنه، برای این کار دو تا مسترپیج ساختم که اگر کاربر لاگین نکرده باشه مسترپیج اول رو صفحه ها اعمال بشه و اگر لاگین کرد مسترپیج دوم.
ولی وقتی از سشنم تو صفحه home استفاده می کنم ازش خطا میگیره! انگار که میگه این سشن وجود نداره!!

اینم تکه کد صفحه home :


protected void Page_Preinit(object sender, EventArgs e)
{
if (Session["Status"] != true)
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";

}

تو رویداد preinit نوشتم چون قبل از هر رویدادی اجرا میشه.

این تصویر لینک های بالای صفحه قبل از لاگین :
98441

و این هم بعد از لاگین :
98442

fahmari
سه شنبه 26 دی 1391, 18:04 عصر
چرا از سشن خطا میگیره؟! اشتباه ازش استفاده کردم؟

malloc
سه شنبه 26 دی 1391, 18:11 عصر
فکر کنم اگه اینجوری بنویسی جواب بگیری .

protected void Page_Preinit(object sender, EventArgs e)
{
if (Session["Status"].tostring() != "true")
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";

}

fahmari
سه شنبه 26 دی 1391, 18:20 عصر
فکر کنم اگه اینجوری بنویسی جواب بگیری .

protected void Page_Preinit(object sender, EventArgs e)
{
if (Session["Status"].tostring() != "true")
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";

}


نه ! نشد :(

malloc
سه شنبه 26 دی 1391, 18:21 عصر
خوب دوست عزیز خطایی که میده چیه ؟؟؟

رو کدوم خط خطا میده ؟؟؟؟


کد بالا رو تو کدوم مستر پیج نوشتی ؟؟؟


حالا یه نکته جدید رویداد زیر و از کجا آوردی :

protected void Page_Preinit(object sender, EventArgs e)

fahmari
سه شنبه 26 دی 1391, 18:35 عصر
این خطا رو میده :
Operator != cannot be applied to operand of type 'object' and 'bool'

همیشه اینجوری از سشن ها استفاده می کردم!! نمیدونم الان مشکل چیه!!

این رو توی صفحه Home نوشتم که اگه کاربر لاگین کرده بود این صفحه با مسترپیج اول لود بشه و در غیر این صورت با مسترپیج دوم.
این روبداد یکی از رویدادهای صفحه هست که قبل از هر روبدادی اجرا میشه.

fahmari
سه شنبه 26 دی 1391, 18:36 عصر
از خط If خطا میگیره ! از session !!

mohandesee
سه شنبه 26 دی 1391, 18:40 عصر
راحتترین کار اینه که دوتا مستر پیج تعریف کنی و پاسش بدی به این دوتا!!!

fahmari
سه شنبه 26 دی 1391, 18:43 عصر
خب منم همین کارو کردم دیگه مهندس !!!
فقط موقع فراخونی و چک کردن session ازش خطا میگیره !

malloc
سه شنبه 26 دی 1391, 18:44 عصر
از خط If خطا میگیره ! از session !!
خوب دوست عزیز شاید وقتی شما این تابع رو فراخونی میکنی واقعا session مقداری توش نیست و عملا تعریف نشده .
(من خودم بشخصه هرجا از سشن استفاده میکنم اونو میزارم تو try و catch که خطاشو کنترل کنه)
حالا اگه مطمعنی که دستور ایجاد سشن قبل از دستور IF اجرا میشه و سشن مقدارشو میگیره نظره دیگه ای ندارم الا اینکه کدهاتو بصورت زیر هم یبار تست کنی :

if (i == 1)
// کاربر وجود دارد پس باید نام او به جای ورود قرار گیرد
{
Session.Add("Status", "true");
Session.Add("HashPass", System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(txtPass.Text, "MD5").ToString());
Session.Add("CurrentUser", txtEmail.Text);


}



protected void Page_Preinit(object sender, EventArgs e)
{
if (Session["Status"].tostring() != "true")
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";

}




دقت کن کدهای بالا یه تغییر جزئی کردن.

واینکه فکر میکنم خطایی که به خط IF میگیره متنش Object refrence.... هست دیگه ؟؟؟؟

tvahid
سه شنبه 26 دی 1391, 18:51 عصر
malloc تقریبا درست گفته
ولی اینطوری کاملتره و دیگه خطا نمیده:

if (Session["Status"] != null)
{
if (Session["Status"].ToString() != "true")
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";
}
else
this.MasterPageFile = "SecondMasterPage.master";

fahmari
سه شنبه 26 دی 1391, 18:54 عصر
ممنون :)
طبق گفته شما مقداری که داخل سشن میریزم رو string کردم درست شد :)
البته نیازی به tostring نداشت. فقط مثل اینکه نمیتونه مقدار سشن رو با مقدار بولین مقایسه کنه..
ممنون دوست عزیز :)

ahmad156
سه شنبه 26 دی 1391, 19:22 عصر
دوست عزیز type واقعی Session شما Boolean هستش باید شما اول از Cast استفاده کنین نه اینکه از ToString استفاده کنین

if (Session["Status"] != null)
{
if ((bool)Session["Status"] != true)
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";
}
else
this.MasterPageFile = "SecondMasterPage.master";

malloc
سه شنبه 26 دی 1391, 19:37 عصر
دوست عزیز type واقعی Session شما Boolean هستش باید شما اول از Cast استفاده کنین نه اینکه از ToString استفاده کنین

if (Session["Status"] != null)
{
if ((bool)Session["Status"] != true)
this.MasterPageFile = "MainMasterPage.master";
else
this.MasterPageFile = "SecondMasterPage.master";
}
else
this.MasterPageFile = "SecondMasterPage.master";




دمت گرم داداشی . من خودم به شخصه اینو نمیدونستم (یعنی به فکرم نمیرسید) و خوب استفاده کردم . خدا خیرت بده.

fakhravari
سه شنبه 26 دی 1391, 20:52 عصر
کلاس convert برسی کنید.
انواع فرمت ها را داره.
مثلا به نوع ساده پراید convert کنی به پژو یا خر به گوره خر و...
:اشتباه:

fahmari
چهارشنبه 27 دی 1391, 16:19 عصر
مشکل حل شده جناب فخرآوری!