单击按钮时为什么SelectedIndexChanged会触发DropDownList?

时间:2010-03-16 08:04:03

标签: .net asp.net drop-down-menu viewstate autopostback

我有一个带有DropDownListAutoPostBack=true的ASP.NET EnableViewState=false。我在页面上有一个什么都不做的按钮。如果我更改了ddl中的选择,它会回发,这是预期的。如果我单击该按钮,页面会回发并且ddl的SelectedIndexChanged将会触发。为什么会被解雇?

4 个答案:

答案 0 :(得分:10)

Microsoft的反馈: - http://connect.microsoft.com/VisualStudio/feedback/details/103844/dropdownlist-always-fire-selectedindexchanged-event-when-viewstate-is-disabled-and-the-selected-item-is-not-changed-by-the-user

  

“感谢您的反馈。如果   页面上禁用ViewState或   在DropDownList控件上,   所选索引无法保存,所以   每个回发看起来都像是选中的   索引已经改变。你可以保存   自己选择的索引   比较它,看看是否   选择真的改变了,或者你   可以启用ViewState   下拉列表。 “

在您的情况下,下拉列表的视图状态为false。启用相同或您可以比较上面建议的所选项目的索引。

答案 1 :(得分:2)

尝试启用viewstate。这是一个常见问题。

修改

如果你不想启用viewstate,你必须自己跟踪下拉列表值,就像这个人DropDownList OnSelectedIndexChange to 0th index w/out ViewState

一样

答案 2 :(得分:1)

如果你在page_load中加载你的ddl,当你点击它按钮时它会再次运行page_load并再次加载ddl项目以更改所选索引。但我不知道你的代码,所以这是一个假设。

答案 3 :(得分:0)

我有同样的问题。我发现我的问题是我调用了渲染函数Page_Load

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender

我完全错过了页面加载Page_Load作为默认加载函数的事实,然后在运行prerender时再次加载它。我将其更改为以下内容,现在只调用一次该函数:

Sub Renderer(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender