Ciao
Vorrei fare un controllo utente dove creo il menu della navigazione per il mio sito. Ho creato dinamicamente dei LinkButton che puntano tutti alla pagina principale (Default.aspx) e li ho messi in un place holder nel menu.
Vorrei quindi valorizzare una variabile nel viewstate nella pagina principale che carica dei componenti a seconda del valore passato dal link(premetto che vengo da programmazione in asp classico; in asp avrei incluso una pagina o l'altra a seconda di un valore passato direttamente sul link es href="default.aspx?variabile=valore" [che preferirei evitare per questioni di sicurezza]).
Per fare questo ho aggiunto nell'evento dei link button un valore al viewstate; quando però cerco di recuperare il valore nella pagina default.aspx non lo vede. Il viewstate allora funziona solo nella classe principale? Esiste un'alternativa rispetto all'uso dei parametri passati sull stringa dell'url?
Grazie
menu.ascx
codice:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Menu.ascx.cs" Inherits="Menu" %>
<div id="menu">
<asp:PlaceHolder ID="MyPlaceHolder" runat="server">
</asp:PlaceHolder>
</div>
menu.ascx.cs
codice:
//Funzione OnClick dei link del menu
protected void LinkButton_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
ViewState["action"]=lb.ID;
}
protected void Page_Init()
{
this.connettiDb();
DbDataReader res_rows = this.eseguiQuery("SELECT * FROM Menu WHERE figlioDi=0");
int intv;
string voce;
int id;
while (res_rows.Read())
{
intv = res_rows.GetOrdinal("Voce");
voce = (string)res_rows.GetValue(intv);
intv = res_rows.GetOrdinal("ID");
id = (int)res_rows.GetValue(intv);
LinkButton btnLnk = new LinkButton();
btnLnk.Text = voce;
btnLnk.Visible = true;
btnLnk.Command += new CommandEventHandler(this.LinkButton_Click);
btnLnk.ID = id.ToString();
btnLnk.PostBackUrl = "Default.aspx";
btnLnk.Attributes.Add("class", "menu_padre");
MyPlaceHolder.Controls.Add(btnLnk);
}
res_rows.Close();
this.chiudiDb();
}
}
Default.aspx
codice:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string str = (string)ViewState["action"];
try
{
num = Int16.Parse(str);
}
catch (Exception e1)
{ num = -1; }
switch (num)
{
case 1:
*
break;
case 2:
*
break;
case 3:
*
break;
}
}
}