我已经填充了一个具有不同文本属性的下拉列表控件,但每个文本属性都具有相同的值(文本属性为A,值属性为blah,文本属性为B,值属性为blahblah等…)
ASP.net仅在回发时检查值属性,因为所有值都相同(for
测试原因)这个小烦人的行为发生了.有工作吗?这是否意味着你不可能永远不会有相同的价值?
解决方法
听起来你正在处理错误的事件.试试
SelectedIndexChanged.
确保您还将AutoPostBack属性设置为True.
好的,所以我开始挖掘这个因为我很好奇:)
使用非唯一值进行数据绑定时存在“问题”.
所以,首先,我公开道歉说不然.
复制:
ASPX
<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="True"> </asp:DropDownList> <asp:Label ID="lblSelItem" runat="server"Text="Currently Selected Item: 0"></asp:Label> <asp:Label ID="lblSelVal" runat="server" Text="Currently Selected Value: X"></asp:Label>
代码隐藏
List<string> MyData() { List<string> rtn = new List<string>(); rtn.Add("I am the same value!"); rtn.Add("I am the same value!"); rtn.Add("I am the same value!"); rtn.Add("I am the same value!2"); return rtn; } protected void Page_Init() { if (!Page.IsPostBack) { // Load the Data for the DDL. myDDL.DataSource = MyData(); myDDL.DataBind(); } } protected void Page_Load(object sender,EventArgs e) { // Display the Currently Selected Item/Value. lblSelItem.Text = "Currently Selected Item: " + myDDL.SelectedIndex.ToString(); lblSelVal.Text = "Currently Selected Value: " + myDDL.SelectedValue; }
运行,更改DropDownList中的值.请注意,不会发生PostBack.
在查看Source时,我意识到我们需要为< option>显式设置“value”属性.服务器控件生成的元素,这使我做了类似的事情:
新代码背后
Dictionary<string,string> MyTwoColData() { Dictionary<string,string> rtn = new Dictionary<string,string>(); rtn.Add("1","I am the same value!"); rtn.Add("2","I am the same value!"); rtn.Add("3","I am the same value!"); return rtn; } protected void Page_Init() { if (!Page.IsPostBack) { // Load the Data for the DDL. Dictionary<string,string> data = MyTwoColData(); foreach (KeyValuePair<string,string> pair in MyTwoColData()) { myDDL.Items.Add(new ListItem(pair.Value,pair.Key)); } myDDL.DataBind(); } }
这将explcitly设置为“1”,“2”,“3”等使它们唯一,同时仍然在列表中显示正确的数据.
显然,您可以将其更改为使用单列列表,但只是运行for循环并使用i或其他值.
至于DataSet的良好解决方法,不确定.
实际上,我们是否会向用户提供具有完全相同值的选项列表?
我个人认为不是,这可能是为什么这个“问题”没有得到解决:)
请享用!
PS:
哦,我还应该补充一点,如果你想在“修复”中使用文本值,那么将它改为SelectedItem而不是SelectedValue.