仅在单击指定按钮时如何启动 DropDownList SelectedIndexChanged 事件?

Posted

技术标签:

【中文标题】仅在单击指定按钮时如何启动 DropDownList SelectedIndexChanged 事件?【英文标题】:How to launch DropDownList SelectedIndexChanged event only if clicked on spicified button? 【发布时间】:2017-10-03 16:01:24 【问题描述】:

所以。我在页面上生成了很多 DropDownLists。页面有 2 个视图,第一个具有可以更改的 DDL,第二个视图正在做其他事情,用户可以更改此视图。

因为 DDL 已生成,所以我在 protected override void OnInit 中重新构建它们,以便能够按用户查看其中的更改(禁用 DDL 上的自动回发)。

现在关于问题。

一切正常,但并非完全正确。如果某些 DDL 被更改并且页面由于回发而开始重新加载(由任何按钮单击引起,在这种情况下是由更改视图的按钮引起的)SelectedIndexChangedevent 正在拍摄并做这件事。

有没有办法让SelectedIndexChanged 事件仅在用户按下某个特定的“保存”按钮而不在按下任何其他按钮后进行拍摄(这会导致回发)?

【问题讨论】:

你不能在SelectedIndexChanged 事件处理程序中检查Page.IsPostback 吗? 您不能使用 Page.IsPostBack 将所有内容包装在 IF 逻辑中并检查 eventargs 或 sender 吗?或者当用户点击保存时,您会更改类似的布尔 CheckDDLs?! 嗯,是的,这是个好主意。但是现在我应该如何从按钮单击中强制“SelectedIndexChanged”?编辑:谢谢,我会尝试 【参考方案1】:

if(Page.IsPostback) return; 添加到您的SelectedIndexChanged 事件处理程序,并直接从按钮的OnClick 方法调用您的事件处理程序。

棘手的部分是您必须在不使用EventArgs 的情况下使您的事件处理函数起作用。

【讨论】:

您能否详细说明一下我应该如何从按钮调用事件处理程序?我应该在里面放什么参数? ddl_SelectedIndexChanged(this, EventArgs.Empty);显然不起作用:) 我应该将 DDL 作为第一个参数传递吗? EventArgs 可以为空吗?因为我有数百个 DDL:\ 所以我应该以某种方式循环调用它们? 您可以使用null, null 调用它——如果您不使用ViewEventArgs。至于如何在所有这些上调用它,您可以在生成它们时将它们添加到 List 中,然后对其进行迭代。或者,如果您出于某种原因不想存储它们,您可以将 Page.Controls 过滤为特定类型 like in this answer。 另外,如果您指定更多页面的功能,也许我们可以找出更好的方法。

以上是关于仅在单击指定按钮时如何启动 DropDownList SelectedIndexChanged 事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在JavaScript中单击按钮时执行操作

回收站视图仅在再次启动活动后才显示更新列表

仅在浏览器刷新后第一次启动时按钮动画不正确

如何在提交按钮上多次单击时仅在数据库中插入一条记录

仅在单击按钮后请求相机权限

应用内购买仅在首次应用启动时失败