【发布时间】:2016-03-09 16:41:24
【问题描述】:
我是 ASP.NET 和 C# 的新手。我有一个带有这样静态列表的网络表单:
private static List<Book> listBook = new List<Book>();
由于服务器在将纯 HTML 发送回客户端后会销毁所有内容,那么为什么每当我将新书添加到 listBook(通过复选框)时,它会在回传中存储信息(在单个页面中)?首先我认为它是视图状态,但显然视图状态只存储 ASP.NET 控件信息。请帮助我,在此先感谢!
public partial class TestSortBook : System.Web.UI.Page
{
private static OBMDbContext context = new OBMDbContext();
BookBL bookBL = new BookBL(context);
GenreBL genreBL = new GenreBL(context);
private static List<Genre> listGenre = new List<Genre>();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Book> listBook = bookBL.FindAllBooks();
PopulateGridView(listBook);
//PopulateGridView(bookBL.SortBookByPriceAscend(listBook) );
PopulateListView(genreBL.FindAllGenres());
}
}
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = (CheckBox)sender;
HiddenField hf = (HiddenField)cb.FindControl("HiddenField1");
int genreID = Convert.ToInt16(hf.Value);
listGenre.Add(genreBL.FindGenre(genreID));
Response.Write("Nothing");
}
}
让我解释一下上面的代码。有一个列表视图,在每个列表视图项中都有一个复选框和一个隐藏字段。每当我点击一个复选框时,它都会向我的listGenre 添加一个新类型,并在回发中保存信息。
【问题讨论】:
-
该列表是 ViewModel 的一部分吗?你能发布更多你的代码吗?
-
使用 Session 对象,正是为了这个,在调用之间存储信息。除非您知道自己在做什么,否则切勿使用静态字段,如果两个用户执行您的页面,则列表上的结果将混合,因为该字段是静态的。
-
@Gusman 哦,谢谢你,我会解决这个问题的 :) 但是你能告诉我更多关于静态的信息吗,我的意思是为什么它可以跨回发存储信息?