我已经开始在现有项目中重写代码,并改变了填充两个dropdownlists
的方式。使用DataBind
时,SelectedValue
在回发后的Page_Load
中具有正确的值。但是在使用AddRange
时,SelectedValue
始终是下拉列表中的第一个值。
下拉列表的填充方式如何影响回发行为?是的,页面中也有java脚本,但我看不出他们如何干扰这个。
工作方式(SelectedValue
中的Page_Load
是正确的):
protected void Page_Init(object sender, EventArgs e)
{
IList<ListItem> list = new List<ListItem>();
list.Add(new ListItem(Resources.Site.OriginalStructure, "0"));
list.Add(new ListItem("5", "5"));
list.Add(new ListItem("10", "10"));
list.Add(new ListItem("15", "15"));
list.Add(new ListItem("20", "20"));
list.Add(new ListItem("25", "25"));
DropDownList1.DataSource = list;
DropDownList1.DataTextField = "Text";
DropDownList1.DataValueField = "Value";
DropDownList1.DataBind();
DropDownList2.DataSource = list;
DropDownList2.DataTextField = "Text";
DropDownList2.DataValueField = "Value";
DropDownList2.DataBind();
}
不起作用的方式(SelectedValue
始终是Page_Load
中ddl中的第一个值):
protected void Page_Init(object sender, EventArgs e)
{
var numberQuestionsPerPageDdlValues = new[]
{
new ListItem(Resources.Site.OriginalStructure, "0"),
new ListItem("5", "5"),
new ListItem("10", "10"),
new ListItem("15", "15"),
new ListItem("20", "20"),
new ListItem("25", "25")
};
DropDownList1.Items.AddRange(numberQuestionsPerPageDdlValues);
DropDownList2.Items.AddRange(numberQuestionsPerPageDdlValues);
}
答案 0 :(得分:1)
“正确的SelectedValue”是指由...选择的值 用户在页面上
您在每次回发时都将DropDownList
绑定到它的DataSource。你应该只做if(!Page.IsPostBack)
。否则,将不会触发事件,并且将覆盖用户的SelectedValue
。
我还建议改为使用page_load
。
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
IList<ListItem> list = new List<ListItem>();
list.Add(new ListItem(Resources.Site.OriginalStructure, "0"));
list.Add(new ListItem("5", "5"));
list.Add(new ListItem("10", "10"));
list.Add(new ListItem("15", "15"));
list.Add(new ListItem("20", "20"));
list.Add(new ListItem("25", "25"));
DropDownList1.DataSource = list;
DropDownList1.DataTextField = "Text";
DropDownList1.DataValueField = "Value";
DropDownList1.DataBind();
DropDownList2.DataSource = list;
DropDownList2.DataTextField = "Text";
DropDownList2.DataValueField = "Value";
DropDownList2.DataBind();
}
}