none
未将对象引用设置到对象的实例 RRS feed

  • 问题

  • using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class fileManage_inceptFile : System.Web.UI.Page
    {
        BaseClass bc = new BaseClass();
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((string)Session["loginName"] == string.Empty)
            {
                bc.MessageBox("该用户在线20分钟,没有操作任何动作,即将返回到系统主页!");
                Response.Redirect("../Index.aspx");
            }
            if (!IsPostBack)
            {
                if (Session["loginName"].ToString() == "admin")   (错误提示:未将对象引用设置到对象的实例)
                {
                    DataList1.DataSource = bc.GetDataSet("select * from [file] order by fileTime desc", "file");
                    DataList1.DataKeyField = "fileid";
                    DataList1.DataBind();
                    RadioButton2.Enabled = false;
                    RadioButton1.Enabled =false;
                    return;
                }
                else
                {
                    DataList1.DataSource = bc.GetDataSet("select * from [file] where examine='已接收' and fileAccepter='" + Session["loginName"].ToString() + "' order by fileTime desc", "file");
                    DataList1.DataKeyField = "fileid";
                    DataList1.DataBind();
                }
            }
            if (RadioButton1.Checked)
            {
                DataList1.DataSource = bc.GetDataSet("select * from [file] where examine='未接收' and fileAccepter='" + Session["loginName"].ToString() + "' order by fileTime desc", "file");
                DataList1.DataKeyField = "fileid";
                DataList1.DataBind();
            }
            if (RadioButton2.Checked)
            {
                DataList1.DataSource = bc.GetDataSet("select * from [file] where examine='已接收' and fileAccepter='" + Session["loginName"].ToString() + "' order by fileTime desc", "file");
                DataList1.DataKeyField = "fileid";
                DataList1.DataBind();
            }
        }
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
        {
            bc.ExecSQL("UPDATE [file] SET examine = '已接收' WHERE fileID ='" + (int)DataList1.DataKeys[e.Item.ItemIndex] + "'");
            DataList1.DataSource = bc.GetDataSet("select * from [file] where fileAccepter='" + Session["loginName"].ToString() + "' order by fileTime desc", "file");
            DataList1.DataKeyField = "fileid";
            DataList1.DataBind();
        }
    }

    错误提示:if (Session["loginName"].ToString() == "admin")  ——>用户代码为处理NullReferenceExcaption      未将对象引用设置到对象的实例。

    请问:怎样修改?

    • 已移动 孟宪会Moderator 2010年5月17日 5:59 (发件人:.NET Framework 一般性问题讨论区)
    2010年5月16日 14:38

答案

  • 这是你的Session["loginName"]未赋值造成的,你应该先做判断

             if (!String.IsNullOrEmpty(Session["loginName"]))
                {

                       if (Session["loginName"].ToString() == "admin")  

                     {

                     }

                    
                }

     


    努力+方法=成功
    2010年5月17日 1:31
  • 1. 任何引用类型你不要轻易相信他是非 null 的,在调用其成员(包括方法、属性等)之前,要问下自己这个对象非空吗?
    2. 任何对象与 string 做比较,不要总是“想当然”调用其 ToString() 方法,想想这个对象本身是不是就是 string 呢?如果是,请直接转换之
    3. 如果你遵循原则 2,原则1 的错误就可以避免了,否则你就是“画蛇添足”

    因此,if ((string)Session["loginName"] == "admin")  


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年5月17日 2:13
  • 导致该问题的原因可能是Session没有赋初值,也可能Session过期被自动删除了发生异常了(比如默认30分钟的Session)。

    一个方法:

    if (Session["loginName"] != null && !string.IsNullOrempty(Session["loginName"]))

    {

        //你可以取出Session的值了,赋给相应的变量

    else

    {

       Response.Redirect("Login.aspx");  //跳转到登录页面,重新登录。

    }

    2010年5月17日 2:16

全部回复

  • if ("admin" == (string)Session["loginName"])
    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2010年5月16日 15:47
  • 这是你的Session["loginName"]未赋值造成的,你应该先做判断

             if (!String.IsNullOrEmpty(Session["loginName"]))
                {

                       if (Session["loginName"].ToString() == "admin")  

                     {

                     }

                    
                }

     


    努力+方法=成功
    2010年5月17日 1:31
  • 1. 任何引用类型你不要轻易相信他是非 null 的,在调用其成员(包括方法、属性等)之前,要问下自己这个对象非空吗?
    2. 任何对象与 string 做比较,不要总是“想当然”调用其 ToString() 方法,想想这个对象本身是不是就是 string 呢?如果是,请直接转换之
    3. 如果你遵循原则 2,原则1 的错误就可以避免了,否则你就是“画蛇添足”

    因此,if ((string)Session["loginName"] == "admin")  


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年5月17日 2:13
  • 导致该问题的原因可能是Session没有赋初值,也可能Session过期被自动删除了发生异常了(比如默认30分钟的Session)。

    一个方法:

    if (Session["loginName"] != null && !string.IsNullOrempty(Session["loginName"]))

    {

        //你可以取出Session的值了,赋给相应的变量

    else

    {

       Response.Redirect("Login.aspx");  //跳转到登录页面,重新登录。

    }

    2010年5月17日 2:16