PDA

View Full Version : سوال: دسترسی به عناصر تو در تو(master page) مانند loginview



naser2009
دوشنبه 31 خرداد 1389, 22:01 عصر
سلام دوستان
من میخوام به اجزای که به صورت nested (تو در تو) در مستر پیچ هستن دسترسی پیدا کن
مثله loginview که خودش میتونه دوتا template داشته باشه.
توجه داشته باشید که loginview من داخله masterpage هست و داخل مسترپیج هم به خوده loginview دسترسی دارم
ولی!!!


<asp:LoginView ID="LoginView" runat="server">
<AnonymousTemplate>
کنترل login
</AnonymousTemplate>

<LoggedInTemplate>
<asp:Label ID="lblLastActivity" runat="server" Text="آخرین بازدید:....... .......... ................."></asp:Label>
</LoggedInTemplate>
</asp:LoginView>

حالا مشکل من اینه که میخوام به این label که با رنگ قرمز مشخص شده دسترسی داشته باشم روش های مختلفی رو تست کردم ولی جواب نداد
لطفا بکمکید:لبخندساده:

Vahid_moghaddam
سه شنبه 01 تیر 1389, 07:49 صبح
در این کنترل ها شما باید از FindControl استفاده کنید. مثال:

((Label)LogView.FindControl("lblLastActivity")).Text="....";

naser2009
سه شنبه 01 تیر 1389, 11:10 صبح
در این کنترل ها شما باید از FindControl استفاده کنید. مثال:

((Label)LogView.FindControl("lblLastActivity")).Text="....";
سلام از این طریق نمیشه قبلا امتحان کردم
حالا جالبه که به کنترل login که داخله
AnonymousTemplate هست از طریقه این کد دسترسی دارم


Login myLogin = (Login)LoginView.FindControl("UserLogin");

ولی به این label که داخله
LoggedInTemplate هست توسط همین کد دسترسی ندارم آیا باید کاره دیگه ای انجام بدم
من که گیج شدم!!:گریه:

حامد مصافی
سه شنبه 01 تیر 1389, 11:18 صبح
Label lbl = (Label)((Master as MasterPage).LoginView.FindControl("lblLastActivity"));
امتحان نكردم ببينم كار مي كنه يا نه، زحمتشو شما بكشيد لطفاً!

naser2009
سه شنبه 01 تیر 1389, 11:27 صبح
Label lbl = (Label)((Master as MasterPage).LoginView.FindControl("lblLastActivity"));
امتحان نكردم ببينم كار مي كنه يا نه، زحمتشو شما بكشيد لطفاً!
سلام حامد جان
نه جواب نمیده :گریه:
رو LoginView این خطا رو میده

Error 16 'System.Web.UI.MasterPage' does not contain a definition for 'LoginView' and no extension method 'LoginView' accepting a first argument of type 'System.Web.UI.MasterPage' could be found (are you missing a using directive or an assembly reference?) J:\MultiLevel\MultiLevelProject_N_0219\Presentatio n\Client\ClientMasterPage.master.cs 21 56 J:\MultiLevel\MultiLevelProject_N_0219\
یعنی اصلا دسترسی نداریم به loginview
حامد توجه کن که loginview داخله مسترپیجه و من میخوام از Codebehind خوده masterpage به اجزای داخلی loginview دسترسی داشته باشم بنابراین لازم نیست اجزای داخل مسترپیج رو پیدا کنم .
any help?

Vahid_moghaddam
سه شنبه 01 تیر 1389, 11:30 صبح
شما وقتی می خواید به LoggedInTemplate دسترسی پیدا کنید، log in کردید یا نه؟ این template وقتی log in کرده باشید ایجاد می شه.

حامد مصافی
سه شنبه 01 تیر 1389, 11:36 صبح
سلام حامد جان
نه جواب نمیده :گریه:
رو LoginView این خطا رو میده

Error 16 'System.Web.UI.MasterPage' does not contain a definition for 'LoginView' and no extension method 'LoginView' accepting a first argument of type 'System.Web.UI.MasterPage' could be found (are you missing a using directive or an assembly reference?) J:\MultiLevel\MultiLevelProject_N_0219\Presentatio n\Client\ClientMasterPage.master.cs 21 56 J:\MultiLevel\MultiLevelProject_N_0219\
یعنی اصلا دسترسی نداریم به loginview
حامد توجه کن که loginview داخله مسترپیجه و من میخوام از Codebehind خوده masterpage به اجزای داخلی loginview دسترسی داشته باشم بنابراین لازم نیست اجزای داخل مسترپیج رو پیدا کنم .
any help?


به جاي MasterPage نام كلاس مستر پيج خودتونو بنويسيد

naser2009
سه شنبه 01 تیر 1389, 11:44 صبح
شما وقتی می خواید به LoggedInTemplate دسترسی پیدا کنید، log in کردید یا نه؟ این template وقتی log in کرده باشید ایجاد می شه.

سلام وحید جان
من الان دارم از این کد استفاده می کنم---->کد داخله رویداد load مسترپیجه


if (Request.QueryString["Register"] == "Complete")
{

FormsAuthentication.RedirectFromLoginPage(Session["Name"].ToString()
+ " " + Session["Family"].ToString(), false);
((Label)LoginView.FindControl("lblLastActivity")).Text = Session["LastActivityDate"].ToString();

}

Querystring بالا وقتی set میشه که از صفحه register.aspx اومده باشم و به موفقیت آمیز ثبت نام صورت گرفته باشه ------->به این صفحه داریم میریم homepage.aspx?Register=complete
حالا وقتی که به صفحه homepage میریم دیگه کنترل login نشون داده نمیشه و label نشون داده میشه البته با مقدار پیش فرض خودش
در کد بالا که گذاشتم بعد از فراخوانی متود RedirectFromLoginPage باید طبیعتا login شده باشیم و باز هم خطای null refrence رو میده یعنی پیداش نمیکنه
؟؟؟؟؟حالا چیکار کنم؟

naser2009
سه شنبه 01 تیر 1389, 11:49 صبح
به جاي MasterPage نام كلاس مستر پيج خودتونو بنويسيد
اینطوری هم جواب نداد :عصبانی++:


Label lbl = (Label)((Master as ClientMasterPage).LoginView.FindControl("lblLastActivity"));

Vahid_moghaddam
سه شنبه 01 تیر 1389, 11:57 صبح
بعد از redirect کد زیر رو بذارید و ببینید مقدار b برابر true هست یا false

bool b=Context.User.Identity.IsAuthenticated;

naser2009
سه شنبه 01 تیر 1389, 12:07 عصر
بعد از redirect کد زیر رو بذارید و ببینید مقدار b برابر true هست یا false

bool b=Context.User.Identity.IsAuthenticated;
بعد از Redirect مقدار False دارد ولی بعد از رفتن به صفحه ی homepage مقدار True دارد
ولی در صفحه homepage دیگه تو انتهای آدرس Querystring --->
Register=complete رو نداریم آیا باید از رو همین کد چک کنم و بعد در صفحه Homepage لیبل مربوطه رو تغییر بدم؟

Vahid_moghaddam
سه شنبه 01 تیر 1389, 12:19 عصر
بعد از Redirect مقدار False دارد ولی بعد از رفتن به صفحه ی homepage مقدار True دارد
ولی در صفحه homepage دیگه تو انتهای آدرس Querystring --->
Register=complete رو نداریم آیا باید از رو همین کد چک کنم و بعد در صفحه Homepage لیبل مربوطه رو تغییر بدم؟

آره. مقدار false بر می گردونه به خاطر اینکه هنوز کوکی خونده نشده.

naser2009
سه شنبه 01 تیر 1389, 12:30 عصر
آره. مقدار false بر می گردونه به خاطر اینکه هنوز کوکی خونده نشده.
آره درسته
نهایتا کد رو به این صورت نوشتم و فکر میکنم دیگه مشکلم حل شده
کدهای رویداد لود در مسترپیج


if (Request.QueryString["Register"] == "Complete")
{

FormsAuthentication.RedirectFromLoginPage(Session["Name"].ToString()
+ " " + Session["Family"].ToString(), false);
}

و کدهای رویداد لود در صفحه homepage.aspx


if (Context.User.Identity.IsAuthenticated)
{
LoginView logview = (LoginView)Master.FindControl("LoginView");
Label lbl = (Label)logview.FindControl("lblLastActivity");
lbl.Text +=" " + Session["LastActivityDate"].ToString();
}

با تشکر از همه دوستان