【发布时间】:2011-11-30 02:12:22
【问题描述】:
是否可以检查一个项目是否在 asp 列表框中多次单击?我正在使用 onSelectedIndexChanged 事件...但我需要查看是否多次单击 SAME 项目。有什么活动吗?
【问题讨论】:
是否可以检查一个项目是否在 asp 列表框中多次单击?我正在使用 onSelectedIndexChanged 事件...但我需要查看是否多次单击 SAME 项目。有什么活动吗?
【问题讨论】:
如果您使用的是onSelectedIndexChanged,这意味着您的列表框将在用户每次点击选项时发回。如果您想跟踪用户是否多次单击同一选项,您可以保留以前单击的项目的列表并将其存储在 ViewState 中。
只要您存储的数据很小且可序列化,那应该没问题。
所以为了保持用户点击的值的运行列表,这样的事情应该可以工作
public List<string> previouslyClickedOptions {
get {
if (ViewState["prevClicked"] == null)
ViewState["prevClicked"] = new List<string>();
return (List<string>)ViewState["prevClicked"];
}
}
在您的 SelectedIndexChanged 中:
string currentlySelected = myLB.SelectedValue;
bool clickedBefore = previouslyClickedOptions.Contains(currentlySelected);
if (!clickedBefore)
previouslyClickedOptions.Add(currentlySelected);
【讨论】:
与 Adam 的答案相同,但添加了 SessionState。
public List<int> previouslyClickedOptions{
get {
if (Session["prevClicked"] == null)
Session["prevClicked"] = new List<int>();
return (List<int>)Session["prevClicked"];
}
}
【讨论】:
adam 关于自动回发更改是一种选择是正确的。如果那是您已经在做的事情,那么进行这种跟踪是有意义的。不过,该属性实际上称为 AutoPostBack,而不是 onSelectedIndexChanged,当有帖子表明控件的值与最初提供时不同时,您可以处理该事件。
不过,您可能不想在每次点击控件时都回帖。这是浏览器和服务器之间来回的大量通信。我建议,如果你想计算点击次数,你最好在客户端上使用 javascript 并在该脚本中更新表单中隐藏的输入,并使用当表单发布为合法时发布的计数理由而不是让它张贴超出必要的方式。
这将为您节省带宽和服务器负载,感觉是一种更好的方法。
【讨论】:
我更喜欢使用 javascript 或 jquery 进行此检查。毕竟这只是一个警告。
【讨论】: