私はc#とasp.netにまったく慣れていないので、私の質問について少し情報を提供できるかどうか教えてください。
ユーザーがログインしているときに、User オブジェクトのインスタンスを作成し、getcategories メソッドを呼び出して、ユーザーを別のページにリダイレクトします。このような:
if (dt.Rows.Count > 0){
user apa = new user();
apa.namn = dt.Rows[0]["FirstName"].ToString() + " " + dt.Rows[0]["LastName"].ToString();
apa.mail = dt.Rows[0]["Email"].ToString();
apa.id = dt.Rows[0]["ID"].ToString();
apa.firstname = dt.Rows[0]["FirstName"].ToString();
apa.lastnamn = dt.Rows[0]["LastName"].ToString();
apa.password = dt.Rows[0]["Password"].ToString();
Session["user"] = apa;
apa.getcategories();
Response.Redirect("visainlagg.aspx");
}
問題は、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生することです。(User クラスの for ループで最初に発生すること)。私はなぜなのか理解していない :(
User クラスは次のようになります。
public string namn;
public string mail;
public string id;
public string firstname;
public string lastname;
public string password;
public string constr = "secret";
public Post[] poster;
public anvcateg[] kategorier;
public int antalKategorier;
public void getcategories() {
SqlConnection conn = new SqlConnection();
conn.ConnectionString = constr;
SqlCommand com = new SqlCommand();
com.Connection = conn;
com.CommandText = "SELECT * FROM Category WHERE Author= '" + id + "'";
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = com;
DataTable dt = new DataTable();
adp.Fill(dt);
antalKategorier = dt.Rows.Count;
kategorier = new anvcateg[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
kategorier[i].Name = dt.Rows[i]["Name"].ToString();
kategorier[i].ID = dt.Rows[i]["ID"].ToString();
kategorier[i].Description = dt.Rows[i]["Description"].ToString();
kategorier[i].Author = dt.Rows[i]["Author"].ToString();
}
}
getcategories() が使用している anvcateg クラスは次のようになります。
public class anvcateg
{
public string ID;
public string Name;
public string Description;
public string Author;