PDA

View Full Version : در MasterPage میتونیم نام کاربری رو نشون بدیم؟



Developer Programmer
شنبه 09 مرداد 1389, 19:06 عصر
فرض کنین که یه MasterPage گذاشتیم که آرم سایت رو بالای سایت نشون میده...الان در یکی از صفحات Detail ، کاربر لاگین میکنه.

میخوام بدونم آیا میتونیم، اطلاعات کاربر مثل نام و نام خانوادگی، رو بعد از لاگین، در MasterPage نشون بدیم که در همه صفحات دیده بشه ؟ ترفند خاصی داره؟

raziee
شنبه 09 مرداد 1389, 19:18 عصر
فرض کنین که یه MasterPage گذاشتیم که آرم سایت رو بالای سایت نشون میده...الان در یکی از صفحات Detail ، کاربر لاگین میکنه.

میخوام بدونم آیا میتونیم، اطلاعات کاربر مثل نام و نام خانوادگی، رو بعد از لاگین، در MasterPage نشون بدیم که در همه صفحات دیده بشه ؟ ترفند خاصی داره؟

بله میشه.
Master Page و Content Page در انتهایت با هم ادغام شده و یک خروجی HTML رو تشکیل میدند.
شما هر کاری رو که در Content Page میتونید انجام بدید در Master Page هم میتونید.

Developer Programmer
شنبه 09 مرداد 1389, 19:51 عصر
خوب ببینین.

Master Page من اینطوریه:


<%@ Master Language="C#‎‎‎" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="LoginMasterPage.Site1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>تست لاگین کاربر در مسترپیج ها</title>
<asp:ContentPlaceHolder ID="Head" runat="server"></asp:ContentPlaceHolder>

<style type="text/css">
.style1
{
width: 100%;
height: 304px;
}
.style2
{
width: 128px;
height: 456px;
}
.style3
{
height: 75px;
text-align: center;
}
.style4
{
height: 456px;
}
.style5
{
height: 68px;
text-align: center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div id="MainDIV">
<table class="style1">
<tr>
<td class="style3" colspan="2">سامانه جامع<br />

<asp:Label ID="lbl" runat="server" Text=""></asp:Label>

</td>
</tr>
<tr>
<td class="style2">
</td>
<td class="style4">
<asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td class="style5" colspan="2">
Footer Page</td>
</tr>
</table>
</div>
</form>
</body>
</html>
همونطور که می بینین، یه فرم ساده است که در بالای صفحه، قرار اگه کاربر لاگین کرد، اسمش رو نشون بده.

الان Content Page رو اینطوری ساختم:

<%@ Page Language="C#‎‎" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LoginMasterPage._Default" %>

<asp:Content ID="content1" ContentPlaceHolderID="MainContent" runat="server">

<asp:Label ID=lbl2 Text="username:" runat=server></asp:Label>
<asp:TextBox ID=txtUser Text="" runat=server></asp:TextBox>
<br />
<asp:Label ID=lbl3 Text="Password:" runat=server></asp:Label>
<asp:TextBox ID=txtpassword TextMode =Password Text="" runat=server></asp:TextBox>
<br />
<asp:Button ID="btnOK" runat=server Text="Login" />

</asp:Content>

فقط دو تا تکست باکسه که قراره کاربر لاگین کنه... و حالا Event های مربوطه :


protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
SqlConnection cnn = new SqlConnection(@"Data Source=AFSHIN-PC;Initial Catalog=dbYusuf;Persist Security Info=True;User ID=sa;Password=123");
string query = "Select [username] from [users] where username like '" + txtUser.Text + "%'";

SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cnn.Open();
SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
Label msg = (Label)PreviousPage.FindControl("lbl1");
msg.Text = dr["username"].ToString();
}

cnn.Close();
}
}



الان من نمیتونم به Label که در MasterPage گذاشتم دسترسی داشته باشم. لطفا راهنمایی کنین.

Developer Programmer
شنبه 09 مرداد 1389, 20:02 عصر
این کد رو هم امتحان کردم ولی جواب نداد


while (dr.Read())
{
ContentPlaceHolder mpContentPlaceHolder;
mpContentPlaceHolder = (ContentPlaceHolder)Master.FindControl("MainContent");
if (mpContentPlaceHolder != null)
{
Label msg = (Label)mpContentPlaceHolder.FindControl("lbl1");
if (msg != null)
msg.Text = dr[0].ToString();
else
Response.Write("<br>control not found<br>");
}
}

Vahid_moghaddam
شنبه 09 مرداد 1389, 21:01 عصر
شبیه به این عمل کنید:

در master page یک property تعریف کنید که به label دسترسی داشته باشه. بعد از content page به او property مقدار بدید.

این لینک رو ببینید:

http://www.devcurry.com/2009/02/access-aspnet-master-page-controls-from.html