我正在使用Web Forms,我在使用Drop-down和post back功能方面遇到了一些麻烦。发生的事情是每个下拉列表都有多种方法,因此当您选择下拉列表索引时,它将转到所述方法并填充选择。
问题是显示这些选择的方法是AutoPostBack(据我所知),它会回发到后端代码并再次运行它。当我尝试将数据保存到模型时会产生问题:
public class List_id_model
{
public List<int> client_id { get; set; }
public List<int> pro_id { get; set; }
}
每次必须使用它时,我都必须重新实例化对象,然后覆盖模型中的数据。我该如何防止这种情况发生?
以下是我的下拉列表的aspx代码:
<asp:DropDownList ID="DropDown_Project" runat="server" AutoPostBack="true" AppendDataBoundItems="true" DataTextField="Company_Name" DataValueField="id" Width ="200px" OnSelectedIndexChanged="DropDown_Project_SelectedIndexChanged" >
<asp:ListItem Text="---Select---" Value="0" />
</asp:DropDownList>
这是背后的代码:
protected void DropDown_Client_SelectedIndexChanged(object sender, EventArgs e)
{
List_id_model client_list = new List_id_model();
client_list.client_id = new List<int>();
client_list.client_id.Add(value);
}
protected void DropDown_Project_SelectedIndexChanged(object sender, EventArgs e)
{
List_id_model client_list = new List_id_model();
client_list.pro = new List<int>();
client_list.pro_id.Add(value);
}
我想要的是以某种方式避免重新实例化&#34; List_id_model&#34;每次我需要添加它,因为这将转储所有当前数据。
如果您对我的问题有任何疑问,我将非常乐意明天早上回复您,因为我有更多时间来解决这个问题。
答案 0 :(得分:2)
您应该将数据存储在某个持久存储中。在您的情况下,您应该使用ViewState。例如:
public List_id_model Model
{
get
{
List_id_model model = ViewState["List_id_model"] as List_id_model;
if (model != null)
return model;
return new List_id_model();
}
set
{
ViewState["List_id_model"] = value;
}
}
protected void DropDown_Client_SelectedIndexChanged(object sender, EventArgs e)
{
List_id_model client_list = Model;
if (client_list.client_id == null)
client_list.client_id = new List<int>();
client_list.client_id.Add(value);
Model = client_list;
}
这段代码是为了演示方法,我没有在IDE中尝试过,很抱歉,如果你发现了一些拼写错误等。