仅在单击指定按钮时如何启动 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 被更改并且页面由于回发而开始重新加载(由任何按钮单击引起,在这种情况下是由更改视图的按钮引起的)SelectedIndexChanged
event 正在拍摄并做这件事。
有没有办法让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
调用它——如果您不使用View
或EventArgs
。至于如何在所有这些上调用它,您可以在生成它们时将它们添加到 List 中,然后对其进行迭代。或者,如果您出于某种原因不想存储它们,您可以将 Page.Controls
过滤为特定类型 like in this answer。
另外,如果您指定更多页面的功能,也许我们可以找出更好的方法。以上是关于仅在单击指定按钮时如何启动 DropDownList SelectedIndexChanged 事件?的主要内容,如果未能解决你的问题,请参考以下文章