0

由于我是 asp 的新手,因此我尝试将名称作为输入,尝试将该名称放入列表中,然后检查列表以查找匹配项。我这样做是为了牢记登录过程的基础,稍后我将尝试实施。我有以下代码:

我做了一个这样的课程:

 public class Login
{
    public string name { get; set; }
}

两个按钮事件如下:

List<Login> list;
protected void Button1_Click(object sender, EventArgs e)
{
    list = new List<Login>(){ 
        new Login { name = TextBox1.Text },
        new Login { name = "Badhon"}
    };

    Label1.Text = "Inserted";

}


protected void btnLogIn_Click(object sender, EventArgs e)
{


    foreach (var s in list)
    {
        if (s.name == TextBox1.Text)
        {
            Label1.Text = "Found";
            break;
        }
        else
            Label1.Text = "Not Found";

    }

}

当我尝试插入时,它工作正常,但是当单击登录按钮时显示任何错误消息,例如“对象引用未设置为对象的实例”。

4

5 回答 5

0

每次点击都是一个新的 HTTP 请求。第一个请求中初始化的列表与另一个请求中的列表不同,因为每个请求都将使用自己的 Page 对象实例。

您需要阅读和了解 ASP.net 页面的生命周期:http: //msdn.microsoft.com/en-us/library/ms178472.aspx

于 2012-06-21T09:07:48.800 回答
0

使protected属性存储登录列表

它应该看起来像这样:

protected List<Login> LoginStore
{
     get{ return ViewState["store"] =! null ? (List<Login>)ViewState["store"] : new List<Login>; }
     set{ ViewState["store"]=value; }
}

你可以Session和 ViewState 一样使用。它会让你的列表不会在你每次做的时候消失PostBack

然后在事件btnLogIn

创造List<Login> list = LoginStore;

然后制作其余的代码。

于 2012-06-21T09:12:08.170 回答
0

当您按下登录按钮时,您处于与按下第一个按钮时不同的范围内,因此该列表未初始化(每次按下 ASP 按钮时,您都会获得一个新状态:Web 设计为无状态)。

为什么不使用asp:login控件?

于 2012-06-21T09:06:18.623 回答
0

你的代码不完全是它应该是的。您最好去搜索一些(各种)关于如何在 ASP.NET 中处理登录的示例。

于 2012-06-21T09:06:27.920 回答
0

点击这里

为什么要做forloop,在Global.asax中使用会话变量,试试googlin你可以找到很多例子..

于 2012-06-21T10:02:24.717 回答