日期:2014-05-18  浏览次数:20434 次

asp.net前后台互动访问问题
假如我现在有个a.aspx页面
cs下面写着如下:
C# code

public Web.Mod.VIP vip;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] == null)
        {
            PageBase.alert(Page, "登陆超时,请重新登陆", "/VIP/Login.aspx");
            return;
        }
        vip= (Web.Mod.VIP)Session["user"];
    }



上面不能看出vip是读取的登陆信息,前台如下:
C# code

<span class="kafeiseleft">欢迎您,<span class="red"><%=vip.Name %></span>,
 这是您第 <span class="red2"><%=vip.Count+1 %></span> 次登陆,
您上次登陆时间为: <%=vip.EndTime %>


当session为null的时候应该提醒登陆,可每次都是报:未将对象引用设置到对象的实例。 
有如下两个问题求解:
1。如果是说前台先执行的,那为何session有值的时候前台先执行还能读到?
2。如果是后台的load先执行的,那么为什么session为null的时候不报未登陆,而是报的前台vip为null的错?
3。除了用label代替前台的%之外,有没有一个两全其美之道?可以让session为null的时候报未登陆,而不是报前台的错

------解决方案--------------------
哎,asp.net前后台混搭的搞法,搞坏了多少人的脑子哦。。。。。。。
------解决方案--------------------
对啊,如果为null的话,前台是读取不到值的,当然报错啦。

你需要首先处理一下
C# code

public Web.Mod.VIP vip;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] == null)
        {
            PageBase.alert(Page, "登陆超时,请重新登陆", "/VIP/Login.aspx");
            //给VIP 初始化一个值
            vip.Name="游客";
            vip.Count = 1;
            vip.EndTime = System.DateTime.Now.ToString("yyyy-MM-dd");
        }
        vip= (Web.Mod.VIP)Session["user"];
    }

------解决方案--------------------
C# code

private Web.Mod.VIP vip;
public Web.Mod.VIP VipInfo
{
   set { vip = value; }
   get { return vip; }
}

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] == null)
        {
            PageBase.alert(Page, "登陆超时,请重新登陆", "/VIP/Login.aspx");
            return;
        }
        VipInfo= (Web.Mod.VIP)Session["user"];
    }

------解决方案--------------------
探讨
对啊,如果为null的话,前台是读取不到值的,当然报错啦。

你需要首先处理一下

C# code

public Web.Mod.VIP vip;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["user"] == null)
{
……