Adi*_*bar 1 c# asp.net selectedindex autopostback
我有一个ASP DropDownList控件,AutoPostBack属性设置为true.当用户更改选择时,表单将按预期回发.我想知道如何在代码隐藏中确定页面是否因特定原因而回发.
protected void MyDropDownList_SelectedIndexChanged(object sender, EventArgs e) {
// Run some code if the selection for the "MyDropDownList" control was changed
}
Run Code Online (Sandbox Code Playgroud)
...但我想知道的是如何检查表单是否回发,因为所选索引在事件处理程序之外被更改.
具体来说,在Page_Load()方法中,我有一个if (IsPostback) {}部分,如果回发是由更改DropDownList中的选择引起的,我希望此部分不执行.所以,在伪代码中,我想要类似的东西:
if (IsPostback && (! <DropDownList's selection was changed, causing an autopostback>)) {
Run Code Online (Sandbox Code Playgroud)
我尝试定义一个全局布尔变量并在事件处理程序中将其设置为true,然后在Page_Load()中检查它,如下所示:
public partial class MyWebApp : System.Web.UI.Page {
[...]
static bool selectedIndexChanged = false;
[...]
protected void DomainDropDownList_SelectedIndexChanged(object sender, EventArgs e) {
selectedIndexChanged = true; // Set this flag to true if selected index was changed
}
[...]
protected void Page_Load(object sender, EventArgs e) {
[...]
if (IsPostBack && selectedIndexChanged == false) {
[...]
}
[...]
Run Code Online (Sandbox Code Playgroud)
这不起作用的原因我认为有经验的ASP.NET开发人员很容易发现:事件处理程序在Page_Load()之后执行,而不管代码的顺序如何.
我还试图查看控件的selectedIndexChanged事件是否可以用作布尔条件来确定是否触发了事件,如下所示
if (IsPostBack && !MyDropDownList.SelectedIndexChanged) {
Run Code Online (Sandbox Code Playgroud)
但Visual Studio给出了以下错误:
事件'System.Web.UI.WebControls.ListControl.SelectedIndexChanged'只能出现在+ =或 - ="的左侧
对错误消息的搜索导致了这个答案,但这似乎没有帮助,因为它依赖于在Page_Load()之后执行的事件处理程序.
在我的特定用例中,只有一个DropDownList和另一种提交表单的方式(提交按钮),检查所选索引是否已更改,是否触发了AutoPostBack,或者是否同样有效单击了提交按钮,但我也想知道如何在更广泛的场景中执行此操作,例如,如果有多个AutoPostBack控件和/或多种方式提交除AutoPostBack之外的表单.
所以,我的问题分解如下(虽然其中一些可能基本上是同一个问题,取决于答案是什么):
如果有更好的方法来实现我在这个特殊情况下要完成的任务,我愿意接受建议,但我仍然想知道上面的答案.
在Page_Load检查期间Page.Request.Form["__EVENTTARGET"].这将包含一个标识符,表示导致回发的控件.从这里你应该能够确定回发是否是由你感兴趣的控件引起的.
if (IsPostBack && Request.Form["__EVENTTARGET"] != "<control ID>") {
...
}
Run Code Online (Sandbox Code Playgroud)
是否可以检查Page_Load()方法或在SelectedIndexChanged事件处理程序之前执行的任何其他代码是否已更改DropDownList的选定索引?
并非没有采用自定义技术.该SelectedIndexChanged事件触发的过程中来不及页面事件生命周期对你们有用的场景.一种选择是将期间存储DropDownList.SelectedIndex到Page.ViewState集合中Page.OnPreRender,然后将此值DropDownList.SelectedIndex与后期期间的新值进行比较Page_Load.
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |