【问题标题】:ASP.NET drop down selected index not changed eventASP.NET 下拉选定索引未更改事件
【发布时间】:2012-10-01 20:28:37
【问题描述】:

在 ASP.NET 中有一个用于 DropDownList 的 onSelectedIndexChange 事件,当下拉列表的选定索引更改时触发。

我遇到了一种情况,当 DropDown 的 SelectedIndex 在选择时没有改变时,我需要触发类似的事件。

我完全不知道在这种情况下该怎么办?

任何帮助/参考将不胜感激。

谢谢。

【问题讨论】:

  • 您能否详细说明这种情况。我无法想象任何这样的场景。
  • 好的。它是一个场景,从下拉列表中选择一个项目,它变成一个显示所选项目的链接按钮,并且下拉列表变为可见错误。然后,当单击链接按钮时,链接按钮会隐藏,下拉菜单会显示最后选择的项目。循环继续。 My problem comes when the same index is selected so no event is fired and the dropdown remains intact.

标签: asp.net drop-down-menu eventtrigger


【解决方案1】:

我认为这很正常。事件是SelectedIndexChanged,您说您选择了之前选择的相同项目。所以索引保持不变,没有改变,事件也不会触发。可能你看看 OnClick。

问题是你第二次点击的时候并没有改变索引,所以下拉菜单还在等你改变

【讨论】:

  • 没错,但我有一种情况,每次选择时我都必须触发事件,无论选择的索引是否已更改。你有答案吗?
【解决方案2】:

假设您的页面上有另一个导致回发的服务器端控件,您可以在回发事件中为另一个控件编写一个例程,将当前选择与前一个选择进行比较并触发自定义事件(或如果值没有改变,你希望发生的例程)。

也就是说,我必须想象有一种更简单的方法可以实现您想要实现的总体目标,但您的问题必须更具体一些。

更新

我必须假设您在处理表单时使用的是下拉列表中的值。为什么不从隐藏下拉菜单和显示链接按钮开始呢?只需从下拉列表中选择一个默认值,并允许用户根据需要进行更改。

这是一个显示该行为的小提琴:http://jsfiddle.net/rjaum/

【讨论】:

  • “另一个导致回发的服务器端控件”但是它什么时候回发才是重点。好吧,请参阅我的下一条评论,以更具体地了解我的问题。不过感谢您的回复!
  • 好的。它是一个场景,从下拉列表中选择一个项目,它变成一个显示所选项目的链接按钮,并且下拉列表变为可见错误。然后,当单击链接按钮时,链接按钮会隐藏,下拉菜单会显示最后选择的项目。循环继续。 My problem comes when the same index is selected so no event is fired and the dropdown remains intact. ——
【解决方案3】:

这很容易。 您可以使用 javascript/jquery/服务器端代码等来实现这一点。假设用户确实单击了控件。 pageLoad 上的类似内容

PageLoad()
{
       YourDropDownList.Attributes.Add("onclick","javascript:CallHelloWorld();return false;");
}

然后在服务器端你可以用 WebMethod 属性装饰一个方法

[WebMethod()]
public static string HelloWorld()
{
      return "Hello foo";
}

在您的客户端 aspx 上,您可以使用 jQuery 调用您的网络方法

<script language="text/javascript">
 function CallHelloWorld()
 {
     // Call HelloWorld webmethod using jQuery $.ajax
 }
 </script>

编辑 您可以使用单选按钮列表而不是下拉列表。这样,在客户端,您可以在单击单选按钮时检查事件是否被选中(如果它被选中会触发您的事件)。 编辑 如果您想专门使用下拉列表,也请尝试查看此线程Fire event each time dropdown list is selected with JQuery

【讨论】:

  • 谢谢达米安!但问题是 onclick 事件将在单击下拉菜单时触发,甚至在选择任何项目之前。我想要的是在选择索引时触发事件!
  • 我很乐意将最佳答案标记为答案,但问题是我的问题仍有待解决。请仔细浏览此线程中的 cmets。
【解决方案4】:

为选定的索引更改事件分配一个事件处理程序并将autopostback设置为true 在标记中

或后面的代码

mydropdownlist.SelctedIndexChanged += NameOfMethod

然后像这样定义处理程序

protected void NameOfMethod(object sender, EventArgs e)
{
     //your code here
}

更新 根据定义,selectedindexchanged 事件只会在索引更改时触发。如果你想强制回发需要一些 javascript。这是一个如何使用 jquery 执行此操作的示例

$(function() {
    $('select').change();
});

【讨论】:

  • 但是如何分配这样的事件,自动回发也已经设置为 true。
  • 是的,很好,但这只会在 selectedindex 更改时触发。我想在做出选择并且未更改所选索引时触发一个事件。这就是重点!
猜你喜欢
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多