.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,同样。不晓得为什么会这样?
...全文
735 12 打赏 收藏 转发到动态 举报
写回复
用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的一条数据,你会知道你取到的是数据库的第几条吗?
扩展功能: a. 首先满足网友的”口味”, 重新设计了所有旗子, 选择新的旗盘背景, 换了一个更清爽的面. (界面配色并不是件很容易的事情, 这样的棋类游戏长时间容易使眼睛疲劳, 首先要做到选择的色彩 不刺激眼睛,其实大部分色彩都比较刺激眼睛,尤其是纯三基色(红/黄/蓝), 还要使界面做得漂亮). b. 增加”回放” 功能. 当下完旗子时,可以重新回味一下, 刚杀完的一盘旗,可以寻找不足和重新感受 一下胜利的喜悦! 这个功能比较复杂! d. 又看了一下电脑走旗, 感觉确实比较难处理, 没有高人指点写这个算法确实比较难, 应该比以前聪明 了一些, 但是还是比较笨, 打算有空去找个现在的电脑走旗组件替换上, 自己的电脑走旗算法慢慢研 究(当时是因为实在找不到现在的组件, 自己写了个较笨的,如果哪位朋友能够提供组件,在次深表感谢!!!). e. 扩展走旗的步数容量, 有些网友, 对战的都是高手, 产生数组越界, 这次从 200 扩展到了500, 当然 您还可以扩展到更大,因为源代码已经开放). f. 增加图像缓存功能. g. 解决 .net 从framework 1.0到framework 2.0升级出现的程式升级逻辑问题及一个小bug. h. 本来我只是想把这个程式放到Blog上, 供爱好c#的网友学习,一起交流一下, 没想到反应那么的强烈! 经常收到网友的反馈邮件, 从下载量看,不到一年仅从我的下载空间(不算网友转载下载次数)就有近 二万五千次. 所以又重新看懂已经基本忘记的代码,修复了bug,并扩展了以上功能. 有可能还会增加一些功能! 另外,在此对给我提交建议和bug的朋友表示感谢!!! (开发语言: C#语言) 来自:http://community.csdn.net/Expert/topic/5237/5237003.xml?temp=.4600031
大家好,又见面了!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,072

社区成员

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

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

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

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