由于我是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";
}
}
当我尝试插入时,它工作正常,但是当点击登录按钮时显示任何错误消息,例如“对象引用未设置为对象的实例。”
答案 0 :(得分:0)
当您按下登录按钮时,您在与第一个按钮不同的范围内,因此列表未初始化(每次按ASP按钮都会获得一个新状态:Web设计为无状态)。
为什么不使用asp:login
控件?
答案 1 :(得分:0)
您的代码并不完全符合预期。你最好去寻找一些关于如何在ASP.NET中处理登录的例子。
答案 2 :(得分:0)
每次点击都是新的HTTP请求。在第一个请求中初始化的列表与另一个请求中的列表不同,因为每个请求都将使用自己的Page对象实例。
你需要阅读&amp;了解ASP.net页面的生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx
答案 3 :(得分: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;
然后制作剩余的代码。
答案 4 :(得分:0)
为什么要去forloop,在Global.asax中使用会话变量,尝试googlin你可以找到很多例子..