首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

static变量的一个有关问题

2012-12-20 
static变量的一个问题代码如下: public static String photoIdprotected void Page_Load(object sende

static变量的一个问题
代码如下:
 public static String photoId="";    protected void Page_Load(object sender, EventArgs e)
    {
        lblUserName.Text = Session["UserName"].ToString();
        if (!IsPostBack)
        {
            this.GetFileData();
        }
    }

    public void GetFileData()
    {
        using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("photo.mdb")))
        {
            conn.Open();
            OleDbDataAdapter os = new OleDbDataAdapter("select * from tb_photo where photoUser='" + Session["UserName"].ToString() + "' order by id desc", conn);
            DataSet ds = new DataSet();
            os.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                GridView1.DataSource = ds.Tables[0];
                GridView1.DataKeyNames = new String[] { "ID" };
                GridView1.DataBind();
            }
        }

        using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("photo.mdb")))
        {
            conn.Open();
            OleDbDataAdapter oa = new OleDbDataAdapter("select * from tb_photo order by id desc",conn);
            
            DataSet ds = new DataSet();
            oa.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                photoId = (Convert.ToInt32(ds.Tables[0].Rows[0][0]) + 1).ToString();
            }
            else
            {
                photoId = "0";


            }           
        }
   }

  protected void btnSave_Click(object sender, EventArgs e)
    {
        String path = fu.PostedFile.FileName;
        String ext = path.Substring(path.LastIndexOf(".") + 1);
        if (ext.ToLower() == "jpg" || ext.ToLower() == "bmp" || ext.ToLower() == "gif" || ext.ToLower() == "png" || ext.ToLower() == "tif")
        {
            String spath = Server.MapPath("Photo\" + photoId + "." + ext);
            path = photoId;
            Response.Write(path);}

这里非要设置photoId为 static  否者  最后的path  值为空 也就是 photoId的值传不到path 解释下为什么
[最优解释]
每次引起page重新加载,里面的变量都会初始化,二static是全局的,你可以使用session来保存变量
[其他解释]
http是无状态的。每当你请求完这个页面,Socket连接就会断开,页面对象就会销毁。
再次去请求时,会重新创建页面类对象,所以即使是全局变量也会重新创建。
点击btnSave的时候,页面产生了PostBack,所以再次请求了该页面对象,因此photoId会恢复为默认值(string的默认值为null)。

如果是同一个页面,可以用VisewState保持状态
多个页面间可以用Cookie(客户端)或者Session(服务端)
整个应用程序集可以用Application
[其他解释]
主要原因就是页面的生命周期的,

如果这个变量只要在当前页面使用的话,可以放到ViewState里面,如
ViewState["path"] = "hello world";


string path = ViewState["path"].ToString();

热点排行