[英]NullReferenceException error in ASP.Net
在下面的代碼中,使用"Names.Add(string)"
方法時出現Null Reference Exception
錯誤。 但是,當我使用靜態類或NamedDB
類的靜態對象時,它可以正常工作。 誰能解釋一下對象實例在ASP.Net Web應用程序中如何工作? 為什么在靜態對象正常工作的情況下在非靜態對象中出現錯誤?
public partial class _Default : System.Web.UI.Page
{
NameDB Names; //Creating Object
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Names = new NameDB();//Instantiation
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Names.Add("dss");//Object Reference is null
GridView1.DataSource = Names.GetName();
GridView1.DataBind();
}
}
//NamedDB class
public class NameDB
{
List<string> Names=new List<string>();
public void Add(string item)
{
Names.Add(item);
}
public string Remove(string item)
{
Names.Remove(item);
return item;
}
public List<string> GetName()
{
return Names;
}
}
您沒有在回發之前實例化的全局對象實例。 在Button1_Click
再次實例化該對象
現在,您期望該集合在回發之間保存數據,但是直到將其存儲在某些地方(如database
, files
, session
, viewstate
或數據cache
,您才會得到它。 不過,Session和ViewState並不用於存儲該類型的數據。
protected void Button1_Click(object sender, EventArgs e)
{
Names = new NameDB();//Instantiation
Names.Add("dss");//Object Reference is null
GridView1.DataSource = Names.GetName();
GridView1.DataBind();
}
替換為:
NameDB Names; //Creating Object
這樣
NameDB Names = new NameDB(); //Creating Object
您可以執行以下任何一項
public partial class _Default : System.Web.UI.Page
{
NameDB Names= new NameDB();//Creating Object
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Names.Add("dss");
GridView1.DataSource = Names.GetName();
GridView1.DataBind();
}
}
要么
public partial class _Default : System.Web.UI.Page
{
NameDB Names;//Creating Object
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Names = new NameDB();//Instantiation
Names.Add("dss");
GridView1.DataSource = Names.GetName();
GridView1.DataBind();
}
}
問題在於將為每個請求重新創建頁面對象。 因此,每次調用都會重新初始化頁面級字段。 而回發只是另一個請求!
如果要在請求之間保留值,則需要找到某種方式來存儲它們。 一些選項是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.