PDA

View Full Version : سوال: مشکل در "استفاده از Session برای نمایش و عدم نمایش کنترلها"



hamid1988
دوشنبه 17 اسفند 1388, 21:12 عصر
با سلام!
دوستان، در یکی از پروژه هام برای نمایش و یا عدم نمایش UserControlها در بخش مدیریت از Session استفاده می کنم، بدین ترتیب که با کلیک بر روی Button، سشن مقداردهی شده و در Page_Load با بررسی مقدار Session کنترل مورد نظر رو Visible=True می کنم.
مشکلی که بهش برخوردم اینه که با یکبار کلیک بر روی Button کنترل مورد نظر نمایش نمی یابد و با کلیک دوباره (2 بار PostBack) کنترل نمایش داده می شود!
پروژه ای آزمایش را برای بررسی راهکارهای رفع مشکل برای دانلود قرار دارم، لطفاَ به پروژه یه نگاهی بندازید.
مرسی

اچ تی ام ال:


<asp:LinkButton ID="ShowDropDownList" runat="server" onclick="ShowDropDownList_Click">ShowDropDownList</asp:LinkButton><br />
<asp:LinkButton ID="ShowListBox" runat="server" onclick="ShowListBox_Click">ShowListBox</asp:LinkButton><br />
<asp:DropDownList ID="ddl" runat="server" Visible="false" >
<asp:ListItem>Item1</asp:ListItem>
<asp:ListItem>Item2</asp:ListItem>
<asp:ListItem>Item3</asp:ListItem>
<asp:ListItem>Item4</asp:ListItem>
<asp:ListItem>Item5</asp:ListItem>
<asp:ListItem>Item6</asp:ListItem>
<asp:ListItem>Item7</asp:ListItem>
<asp:ListItem>Item8</asp:ListItem>
<asp:ListItem>Item9</asp:ListItem>
<asp:ListItem>Item10</asp:ListItem>
</asp:DropDownList><br />
<asp:ListBox ID="ListBox1" runat="server" Visible="false" >
<asp:ListItem>Item1</asp:ListItem>
<asp:ListItem>Item2</asp:ListItem>
<asp:ListItem>Item3</asp:ListItem>
<asp:ListItem>Item4</asp:ListItem>
<asp:ListItem>Item5</asp:ListItem>
<asp:ListItem>Item6</asp:ListItem>
<asp:ListItem>Item7</asp:ListItem>
<asp:ListItem>Item8</asp:ListItem>
<asp:ListItem>Item9</asp:ListItem>
<asp:ListItem>Item10</asp:ListItem>
</asp:ListBox>
protected void Page_Load(object sender, EventArgs e)
{
object obj = Session["Visible"];
if (obj != null)
{
if (obj.ToString().Equals("ShowDropDownList")) { ddl.Visible = true; }
else if (obj.ToString().Equals("ShowListBox")) { ListBox1.Visible = true; }
}
}

protected void ShowDropDownList_Click(object sender, EventArgs e)
{
Session.Add("Visible", "ShowDropDownList");
}

protected void ShowListBox_Click(object sender, EventArgs e)
{
Session.Add("Visible", "ShowListBox");
}

Peyman.Gh
دوشنبه 17 اسفند 1388, 21:47 عصر
در حال حاضر چیزی جز این به ذهنم نرسید :


protected void Page_Load(object sender, EventArgs e)
{
if (Session["Visible"] == "ShowDropDownList")
{
if (Request.QueryString["id"] == "1")
{
ddl.Visible = true;
}
}
if (Session["Visible"] == "ShowListBox")
{
if (Request.QueryString["id"] == "2")
{
ListBox1.Visible = true;
}
}

}

protected void ShowDropDownList_Click(object sender, EventArgs e)
{
Session.Add("Visible", "ShowDropDownList");
string url = "default.aspx?";
url += "id=" + "1";
Response.Redirect(url);
}

protected void ShowListBox_Click(object sender, EventArgs e)
{
Session.Add("Visible", "ShowListBox");
string url = "default.aspx?";
url += "id=" + "2";
Response.Redirect(url);
}

hamid1988
دوشنبه 17 اسفند 1388, 21:58 عصر
ممنون جناب Peyman.Gh (http://barnamenevis.org/forum/member.php?u=121278) ، اما همانطور که گفتم این پروژه آزمایشی بود، در پروژه ی اصلی حدود 20 تا UserControl دارم که با این روش میخام نمایش/عدم نمایش بدم. استفاده از روش پیشنهادی شما باعث بالا رفتن حجم کدنویسی و عدم خوانایی کد در بروز رسانی های بعدی میشه.
ممنون

Peyman.Gh
دوشنبه 17 اسفند 1388, 22:15 عصر
خوب از Div یا Panel استفاده کنید تا گروهی این عمل را انجام دهید.

Peyman.Gh
دوشنبه 17 اسفند 1388, 22:25 عصر
راه های زیادی هست به طور مثال :

protected void ShowDropDownList_Click(object sender, EventArgs e)
{
Session.Add("Visible", "1");
Server.Transfer("default.aspx");
}بعد از اضافه کردن سشن سرور تراسنفر کنید.

hamid1988
دوشنبه 17 اسفند 1388, 22:27 عصر
ممنون جواب داد!