关于变量的生命周期

langel 2003-10-20 05:13:04
public class UserAudit : System.Web.UI.Page
{
protected string strTemp
.............
}
申明了上述位置申明的变量,其生命期是否应该是整个页面?
但为什么我在页面第一次加载时调用一个函数private string SetList(),在此函数中引用变量strTemp时提示“未将对象引用设置到对象的实例。”
这是怎么回事,而且有时又可能会执行成功,但当点击了某个按钮进行了回送之后,再去引用该变量又提示上述错误信息!

这个问题困扰我很久了,一直没找到答案,请各位指教一下!

...全文
92 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
langel 2003-10-20
  • 打赏
  • 举报
回复
我只贴出我认为相关的部分:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace SECOnline.UserManage
{
/// <summary>
/// UserAudit 的摘要说明。
/// </summary>
public class UserAudit : System.Web.UI.Page
{
.........
protected SqlConnection objConnection = new SqlConnection();
protected SqlDataAdapter objDataAdapter;
private DataSet objDataSet = new DataSet();

#region 按照用户输入的“用户名”检索指定用户
private void Search_User(string strUID)
{

/* 输入参数:strUID 输入的用户名,“”为全部用户*/

string strSQL; // 查询用的SQL语句

/* 根据用户输入生成查询用的SQL语句 */
strSQL = "SELECT sUID, sPenName, iSex, sPWD, sPWDQ, sPWDQA, sAuthString, iBonus, dtValidity, "
+ "sRealName, dtBirthday, sCompany, sAppointment, sEmail, sTel, sAddr, sZip, "
+ "sContact, dtRegDate, sSoftwareVersion, sSoftwareSN, sSelfDeScribe "
+ "FROM tUserBaseInfo "
+ "WHERE sAuthString LIKE '%1%' ";
if (strUID == "")
{
// 未输入用户名则检索全部未审核,或未通过审核的申请注册成为VIP会员的用户
//NULL
}
else
{
// 输入了用户名则检索指定用户(该用户未通过审核 或未经审核,但申请注册成为VIP会员)
strSQL = strSQL + "AND (sUID = '" + strUID + "') ";

}

// 设置DataAdapter的检索条件
objConnection.ConnectionString = Application["strConString"].ToString();
objConnection.Open();
objDataAdapter = new SqlDataAdapter(strSQL,objConnection);

// 检索数据,填入列表
objDataSet.Clear();

objDataAdapter.Fill(objDataSet,"NeedToAudit");
DGrdNeedToAudit.DataSource = "objDataAdapter";
DGrdNeedToAudit.DataMember = "NeedToAudit";
DGrdNeedToAudit.DataBind();
objConnection.Close();

// 列出第一个用户的详细信息
if (objDataSet.Tables["NeedToAudit"].Rows.Count != 0)
{
SetDetails(0);
}

}
#endregion

#region 根据用户名检索出该用户的详细信息,列表显示
private void SetDetails(int intRow)
{
// string strSQL; // 检索数据的SQL语句
DataRow drRow; // 用户点击的行
;

/* 检索数据 */
/* 设置用户信息详细列表 */
drRow = objDataSet.Tables["NeetToAudit"].Rows[intRow];
// UID
sUID.InnerHtml = "<FONT color=Green>" + drRow["sUID"].ToString() + "</FONT>";
}
#endregion

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
// 初始时检索出所有待审核用户
Search_User("");
}

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.SearchUser.Click += new System.EventHandler(this.SearchUser_Click);
this.DGrdNeedToAudit.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DGrdNeedToAudit_ItemCommand);
this.DGrdNeedToAudit.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DGrdNeedToAudit_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DGrdNeedToAudit_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemIndex != -1)
{
// 在待审核用户列表中添加序号
e.Item.Cells[0].Text = (e.Item.ItemIndex + 1).ToString();
}

}

private void SearchUser_Click(object sender, System.EventArgs e)
{
Search_User(UID.Text.Trim()); // 检索指定用户
}


private void DGrdNeedToAudit_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
SetDetails(e.Item.ItemIndex); // 显示详细信息
}
}
}


=====================================
如果声明方式象贴出来的这样的话,执行到DGrdNeedToAudit.DataBind();就说编译错误
如果private DataSet objDataSet = new DataSet();改成protected的话,执行到drRow = objDataSet.Tables["NeetToAudit"].Rows[intRow];
时说“未将对象引用放在对象实例中”
lucidaxy 2003-10-20
  • 打赏
  • 举报
回复
变量范围是过程中的,可以通过申明静态static变量实现生存期内全局作用
dongbeiren 2003-10-20
  • 打赏
  • 举报
回复
看来不是这里的问题了:)
rgbcn 2003-10-20
  • 打赏
  • 举报
回复
把代码贴出来一看。
LineCorner 2003-10-20
  • 打赏
  • 举报
回复
整个页面是可以确定的!
请检查一下程序的其他部分!
langel 2003-10-20
  • 打赏
  • 举报
回复
dongbeiren() 的方法不行,如果那样改的话,连数据绑定都不能正确执行!!
dongbeiren 2003-10-20
  • 打赏
  • 举报
回复
protected string strTemp
--->private string strTemp
afxucamd 2003-10-20
  • 打赏
  • 举报
回复
1、整个页面。
2、web是无状态的。如果想保持状态可以使用Session,ViewState等
kandyasp 2003-10-20
  • 打赏
  • 举报
回复
过程中吧

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧