假设我有一个产品类别的DropDownList和一个基于DropDownList中类别选择的产品ListView。当用户访问该页面时,可能会出现一致性问题,因为属于新类别的新产品可能会在用户浏览时添加到库存中。
当用户选择要查看的其他类别(SelectedIndexChanged事件)并导致回发时,我希望DropDownList更新类别列表以包括同时添加的新类别,同时仍能够创建更改所选索引。回发时,DropDownList似乎不支持此更新。那么如何处理这个并发问题?
答案 0 :(得分:7)
无论是否检查Page_Init 事件中的回发下拉列表,您都需要绑定并重新绑定。 不会对下拉列表的选定索引进行任何更改,您可以继续正常工作,在加载视图状态之前调用页面init方法。表示在此方法之后将选择您的下拉列表索引,您可以使用dropdown_selectedIndexChanged方法访问它。
的更多信息修改1:查看示例代码
protected void Page_Init(object sender, EventArgs e)
{
// here you bind your dropdown
// don't check IsPostBack
DropdownList1.DataSource = db.GetCategories();
DropdownList1.DataTextField = "TextField";
DropdownList1.DataValueField = "ValueField";
DropdownList1.DataBind();
}
ASP.Net在 Page_Init 之后和 Page_Load 事件之前加载控制视图状态,因此DropDownList1的selectedIndex不会受到影响,并且您得到了所需的结果。
答案 1 :(得分:1)
只需检查页面调用是否为IsPostBack
的回发,然后在下拉列表中调用dataBind()
答案 2 :(得分:1)
当然,您可以在回发后更改数据源。您甚至可以通过调用DropDownListbox上的DataBind()方法来刷新其中的数据。
答案 3 :(得分:0)
如果由于某种原因无法在Page_Init
中绑定(如在我的情况下),则执行此操作的另一种方法:
var selected = ddList.SelectedValue;
ddList.DataSource = DBHelper.GetCategories();
ddList.DataBind();
ddList.SelectedValue = selected;
删除所选类别时,您仍需要处理情况。