我很抱歉这个微不足道的问题,但我无法在Google或我的参考书中找到有关此问题的信息,这些信息准确地描述/解决了我的问题。
我在页面上有一些DropDownList控件,我用SQL表中的信息填充。刷新页面时,DropDownLists不会丢失旧值,而是重新添加相同的值,所以现在它们是双重填充的。功能仍然相同,但它使DropDownList控件看起来不那么整洁,显然是不需要的。
<asp:DropDownList ID="DropDownList2" runat="server" OnLoad="LoadDutchessSubjects"
AppendDataBoundItems="true">
我的代码中的LoadDutchessSubjects函数只是抓取SQL表中的所有记录并将它们加载到DDL中:
public void LoadDutchessSubjects(object sender, EventArgs e)
{
string connectionString = SqlHelperClass.ConnectionString;
DataTable subjects = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
try
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM cfhudson_counties ORDER BY County", con);
adapter.Fill(subjects);
DropDownList2.DataSource = subjects;
DropDownList2.DataTextField = "County";
DropDownList2.DataValueField = "County";
DropDownList2.DataBind();
}
catch (Exception ex)
{
DropDownList2.Items.Insert(0, new ListItem("<ERROR: Occured in populating.>", "1"));
}
con.Close();
}
//Overall.Items.Insert(0, new ListItem("<Select Subject>", "0")); //(dev test)
}
我是否可以在Code Behind中做些什么来防止这种情况发生?这是否与ASP.net状态和刷新/服务器端有什么关系?也许我们可以把这个问题变成一个更有用和一般性的解释,说明为什么会发生这种情况,因为我显然不了解ASP.net的一些重要内容。
答案 0 :(得分:2)
不要在回发上重新加载项目。它们在视图状态中持久存在
public void LoadDutchessSubjects(object sender, EventArgs e)
{
if (IsPostback)
return;
string connectionString = SqlHelperClass.ConnectionString;
DataTable subjects = new DataTable();