134 messaggi dal 06 marzo 2009
Salve,
Mi dite perchè quando non c'è la sessione in c#,
mi salta fuori questo errore:

Riferimento a un oggetto non impostato su un'istanza di oggetto.

codice in c#.
<%@ Page Language="C#" %>

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

<script runat="server">

    protected void Page_Load(object sender, System.EventArgs e)
    {
        string strAdmin = "3";

        if (Session["userLogged"].ToString() == "1" & Session["role"].ToString() == "" + strAdmin + "" & Session["level"].ToString() == "10")
        {
           

            lblmsg.Text = "Ciao, " + Session["nick"] + ",Sei un utente, " + Session["level"] + "";
        }
        else
        {
            Response.Redirect("/default.aspx");
           

            //
        }





    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblmsg" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>



è perchè in vb.net scritto il codice ovviamente cambiando la sintassi,
funziona anche se non c'è la sessione e manda la pagina dove deve andare.
invece in c# mi da quell'errore lì.?

grazie.

<%@ Page Title="" Language="VB" MasterPageFile="~/admin/MasterPage.master" %>

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim strAdmin As String = "3"
            
        If Session("userLogged") = "1" And Session("role") = "" & strAdmin & "" And Session("level") = "10" Then

            lblmsg.Text = "Ciao, " & Session("nick") & ",Sei un utente, " & Session("level") & ""


        Else

            Response.Redirect("/default.aspx")
               
                
        End If
            
            
        
    End Sub
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Label ID="lblmsg" runat="server"></asp:Label></asp:Content>



Mi aiutate risolvere il problema.
grazie.
saluti
45 messaggi dal 16 ottobre 2007
www.lucatrombin.it
Ciao, la differenza è che nel caso di C# fai un .ToString() dell'oggetto recuperato dalla session prima di verificare che l'oggetto non sia null, mentre in VB fai una raffronto diretto.

Inoltre tra stringhe in raffronto DEVE essere fatto utilizzando l'operatore Equals altrimenti fai il raffronto tra i puntatori delle stringhe e non il loro contenuto.

La sintassi corretta per C# è la seguente:

if (Session["userLogged"] != null &&
Session["userLogged"].ToString().Equals("1") &&
Session["role"] != null &&
Session["role"].ToString().Equals(strAdmin) &&
Session["level"] != null &&
Session["level"].ToString().Equals("10"))
{
lblmsg.Text = "Ciao, " + Session["nick"].ToString() + ",Sei un utente, " + Session["level"].ToString() + "";
}

Il codice ancora più corretto sarebbe il seguente e prevede l'utilizzo di int.TryParse():

int admin = 3
out int userLogged = -1;
out int role = -1;
out int level= -1;

if (Session["userLogged"] != null &&
Session["role"] != null &&
Session["level"] != null &&
Session["nick"] != null &&
int.TryParse(Session["userLogged"].ToString(), out userLogged) &&
int.TryParse(Session["role"].ToString(), out role) &&
int.TryParse(Session["level"].ToString(), out level) &&
userLogged == 1 && role == admin && level == 10)
{
lblmsg.Text = "Ciao, " + Session["nick"].ToString() + ",Sei un utente, " + level;
}


ciao,

Luca
pinguino ha scritto:
Inoltre tra stringhe in raffronto DEVE essere fatto utilizzando l'operatore Equals altrimenti fai il raffronto tra i puntatori delle stringhe e non il loro contenuto.

Falso; quello che dici vale ad esempio in Java ma non in .NET; le stringhe, pur essendo reference type, vengono infatti confrontate in base al contenuto e non al puntatore in memoria. A quanto pare si tratta di una cosa che sfugge a molti visto che l'ho fatto presente anche qualche settimana fa qui...
Riporto la citazione
For reference types other than string, == returns true if its two operands refer to the same object. For the string type, == compares the values of the strings.
(rif. http://msdn.microsoft.com/en-us/library/53k8ybth.aspx)
Ad ogni modo preferisco anche io confrontare due stringhe tramite il metodo Equals, in particolare quando mi serve l'overload che prevede di specificare il tipo di comparazione (enumeratore StringComparison)
HTH

Matteo Casati
GURU4.net
134 messaggi dal 06 marzo 2009
ciao,grazie mille per la spiegazione ma usero quello fatto in vb.net perchè mi è più facile perche io provengo da asp 3 classic .

quindi uso quello fatto in vb.net.

grazie.
45 messaggi dal 16 ottobre 2007
www.lucatrombin.it
Ti ringrazio della correzione, essendo un ex Java mi sono confuso.

ciao,

Luca
134 messaggi dal 06 marzo 2009
scusate, poi ho risolto con c#, perchè vb.net e asp 3 li vorrei abandonare perchè mi piace di più c#.

comunque io con questo codice funziona tutto regolamente,

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" %>

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["UserLogged"] == null)
        {
            Panel1.Visible = false;
            Label1.Text = "Non sei autenticato";
        }
        else
        {
            Panel1.Visible = true;
            lblUserLogin.Text = Session["User"].ToString();
            Label2.Text = Session["Email"].ToString();
        }
    }
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Panel ID="Panel1" runat="server">
    <asp:Label ID="lblUserLogin" runat="server" Text="Label"></asp:Label>
    <asp:Label ID="Label2" runat="server" ></asp:Label>
    </asp:Panel><asp:Label ID="Label1" runat="server" ></asp:Label></asp:Content>
45 messaggi dal 16 ottobre 2007
www.lucatrombin.it
Si certo però così puoi avere problemi con la durata delle sessioni e con i dati sensibili.

ciao,

Luca
134 messaggi dal 06 marzo 2009
si lo so , ma quello era un esempio per testare se mi ricuperava bene le sessioni,
poi faccio tutto sicuro.


ciao.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC