.net一bug,来看看

yzncong 2013-09-30 01:14:59

<select id="test" runat="server">
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
</select>


当K,V值相同时,
SelectedIndex
获取到的值永远等于0,换用DropDownList,同样。不晓得为什么会这样?
...全文
741 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
王者天杰 2013-10-10
  • 打赏
  • 举报
回复
key 必须唯一 这不算bug。
yzncong 2013-10-10
  • 打赏
  • 举报
回复
引用 9 楼 c02645 的回复:
LZ为什么想着会有value和text值都相同的选项出来呢? 就像数据库的没有设置主键一样,id值都是1有很多条。 如果你想取id=1的一条数据,你会知道你取到的是数据库的第几条吗?
确实有这种需求,不然,也不会发现这个bug。
jiaoshiyao 2013-09-30
  • 打赏
  • 举报
回复
楼主设计的Html就有bug
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
[quote=引用 楼主 yzncong 的回复:]

<select id="test" runat="server">
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
</select>
当K,V值相同时,
SelectedIndex
获取到的值永远等于0,换用DropDownList,同样。不晓得为什么会这样?
因为它post上去的是value=1,服务器据此推断selectindex[/quote]+1
gengchenhui 2013-09-30
  • 打赏
  • 举报
回复
这是不懂基础的缘故吧? 嗯,我说微软他们那帮人,根本不懂最基础的html,还开发个P的ASP.NET啊,楼主你说是么???
threenewbee 2013-09-30
  • 打赏
  • 举报
回复
所以论坛中有很多脚本小子在搞所谓的“模拟浏览器提交”,你不要觉得奇怪——他们连浏览器都不用,哪里来的selectindex,人家照样提交数据。
threenewbee 2013-09-30
  • 打赏
  • 举报
回复
引用 楼主 yzncong 的回复:

<select id="test" runat="server">
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
<option value="1">测试</option>
</select>
当K,V值相同时,
SelectedIndex
获取到的值永远等于0,换用DropDownList,同样。不晓得为什么会这样?
因为它post上去的是value=1,服务器据此推断selectindex
  • 打赏
  • 举报
回复
对于asp.net这么低门槛的东西,学习它要会读取源代码。 来看看 HtmlSelect 控件的源代码
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
{
	return this.LoadPostData(postDataKey, postCollection);
}

protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
	string[] values = postCollection.GetValues(postDataKey);
	bool flag = false;
	if (values != null)
	{
		if (!this.Multiple)
		{
			int num = this.Items.FindByValueInternal(values[0], false);
			if (this.SelectedIndex != num)
			{
				this.SelectedIndex = num;
				flag = true;
			}
		}
		else
		{
			int num2 = values.Length;
			int[] selectedIndices = this.SelectedIndices;
			int[] array = new int[num2];
			for (int i = 0; i < num2; i++)
			{
				array[i] = this.Items.FindByValueInternal(values[i], false);
			}
			if (selectedIndices.Length == num2)
			{
				for (int j = 0; j < num2; j++)
				{
					if (array[j] != selectedIndices[j])
					{
						flag = true;
						break;
					}
				}
			}
			else
			{
				flag = true;
			}
			if (flag)
			{
				this.Select(array);
			}
		}
	}
	else
	{
		if (this.SelectedIndex != -1)
		{
			this.SelectedIndex = -1;
			flag = true;
		}
	}
	if (flag)
	{
		base.ValidateEvent(postDataKey);
	}
	return flag;
}

public virtual int SelectedIndex
{
	get
	{
		for (int i = 0; i < this.Items.Count; i++)
		{
			if (this.Items[i].Selected)
			{
				return i;
			}
		}
		if (this.Size <= 1 && !this.Multiple)
		{
			if (this.Items.Count > 0)
			{
				this.Items[0].Selected = true;
			}
			return 0;
		}
		return -1;
	}
	set
	{
		if (this.Items.Count == 0)
		{
			this.cachedSelectedIndex = value;
			return;
		}
		if (value < -1 || value >= this.Items.Count)
		{
			throw new ArgumentOutOfRangeException("value");
		}
		this.ClearSelection();
		if (value >= 0)
		{
			this.Items[value].Selected = true;
		}
	}
}

internal int FindByValueInternal(string value, bool includeDisabled)
{
	int num = 0;
	foreach (ListItem listItem in this.listItems)
	{
		if (listItem.Value.Equals(value) && (includeDisabled || listItem.Enabled))
		{
			return num;
		}
		num++;
	}
	return -1;
}
  • 打赏
  • 举报
回复
出现你这个疑问,主要原因使你没有去理解html从浏览器端给服务器提交的是什么值(字符串“1”,而不是位置编号)。如果你稍微深入一点,不要浅尝辄止,就会更容易搞懂技术了。
  • 打赏
  • 举报
回复
假如客户端post一个字符串“1”这个值,你的控件要找到对应的index,自然是第一个(下标0)就匹配。 本来就是如此,没有什么可奇怪的。
洪爷爷 2013-09-30
  • 打赏
  • 举报
回复
index不是从0开始算的吗?
c02645 2013-09-30
  • 打赏
  • 举报
回复
LZ为什么想着会有value和text值都相同的选项出来呢? 就像数据库的没有设置主键一样,id值都是1有很多条。 如果你想取id=1的一条数据,你会知道你取到的是数据库的第几条吗?
大家好,又见面了!EasyUI又更新了,这次更新内容还是不少的,具体内容请参考下面的更新说明,官方的更新说明中还少了1条,我给补上了。 jQuery EasyUI 1.3.5版本更新内容: Bug(修复) searchbox:修复“searcher”函数提供的“name”参数值错误的问题; combo:修复“isValid”方法无法返回布尔值的问题; combo:修复点击页面某一个combo组件的下拉列表时触发的“onHidePanel”事件会导致页面上其他combo组件的下拉列表被关闭的问题; combogrid:修复某些从combo组件继承来的方法无法使用的问题。 Improvement(改进) datagrid:改进检查行时候的性能; menu:允许追加菜单分隔符; menu:新增“hideOnUnHover”属性用于在鼠标离开菜单的时候指示是否需要隐藏菜单; slider:新增“clear”和“reset”方法; tabs:新增“unselect”方法、“onUnselect”事件; tabs:新增“selected”属性,用于指定的默认打开的面板; tabs:Tab Panel(Tab页)新增“collapsible”属性,用于设置是否允许摺叠面板; tabs:新增“showHeader”属性、“showHeader”方法和“hideHeader”方法; combobox:允许“disabled”属性禁用下拉列表选项; tree:改进数据加载时候的性能; pagination:新增“layout”属性,用于自定义控件的样式布局; accordion:新增“unselect”方法、“onUnselect”事件; accordion:新增“select”和“multiple”属性; accordion:新增“getSelections”方法; datebox:新增“sharedCalendar”属性,允许多个datebox控件共享使用同一个calendar控件。 datebox:新增“buttons”属性,用于自定义日历下方的按钮。 (译者注:该点更新内容官方更新公告上没有注明,具体内容和用法请看datebox的API。) 历史版本: - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/6302785 - jQuery EasyUI 1.3.4 离线API简体中文版 http://download.csdn.net/detail/richie696/5363933

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧