【发布时间】:2026-02-08 01:20:06
【问题描述】:
我发现这个问题被问了无数次,但答案对我没有用:
我有一个从asp:Objectdatasource 动态绑定的asp:Dropdownlist。按钮调用代码隐藏函数来存储所选值。但是,在单击事件函数中,下拉列表的值始终重置为默认值,AFAIK 由于在单击事件处理程序之前调用的回发。调试时,我检查了 ViewStateMode 已启用并且 EnableViewState 为真。我已经被这个问题困扰了好几个小时了,有人知道吗?
ASPX 标记:
<asp:DropDownList runat="server" DataSourceID="AvailableNivamalerODS" ID="AddNivamalerDDL" />
<asp:ObjectDataSource runat="server" ID="AvailableNivamalerODS" TypeName="Nivamaler.NivamalerPresenter"
SelectMethod="GetAvailableNivamalers"></asp:ObjectDataSource>
<asp:Button runat="server"
Text="Legg til"
OnClick="AddNivamalerToTjstpl"
ID="AddNivamalerBtn"
UseSubmitBehavior="False"
CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"/>
代码隐藏
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
AddNivamalerDDL.DataBind()
End If
End Sub
点击事件处理程序:
Protected Sub AddNivamalerToTjstpl(sender As Object, e As EventArgs) Handles AddNivamalerBtn.Click
Dim nivamalerId As Integer = AddNivamalerDDL.SelectedValue
'Here nivamalerId is always the default value
End Sub
干杯!
编辑
上一个问题的回复基本上都说将数据绑定放在Page_Init方法或!IsPostBack之后的Page_Load方法中,这对我没有帮助。
还有一个免责声明:这是一个包含大量代码的遗留项目(相关代码是新的),但我试图剪掉相关部分。据我所知,其余代码不应该影响这一点,但我不能确定,因为我对 ASP.Net 还是很陌生
【问题讨论】:
-
如果你已经看到这个问题被问了无数次,但答案对你没有用,你应该在你的问题中描述那些失败的答案。否则你很可能会再次得到许多相同的答案,这将浪费大家的时间。
-
好点。他们通常说您必须在检查 Page_Load 中的 !IsPostBack 之后在 page_init og 中进行数据绑定,但我已经在这样做了。作为旁注,我注意到即使我没有在下拉列表中明确调用 DataBind() ,它也会正确绑定。另外,我找到了一种解决方案,建议您可以将值放入 Session 并在回发后选择它,但对我来说这感觉像是不好的做法......
标签: asp.net vb.net postback code-behind