回发后保留下拉列表的选定值

Retain selectedvalue of dropdownlist after postback

我发现这个问题被问过无数次,但答案对我没有用:

我有一个从 asp:Objectdatasource 动态绑定的 asp:Dropdownlist。按钮调用代码隐藏函数来存储所选值。但是,在单击事件函数中,下拉列表的值始终重置为默认值,据我所知,这是由于在单击事件处理程序之前调用的回发。调试时,我检查过 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

干杯!

编辑

前面问题的回复基本都是说把data binding放在Page_Init方法或者Page_Load方法中!IsPostBack之后,对我没有帮助。

还有一个免责声明:这是一个包含大量代码的旧项目(相关代码是新的),但我试图删掉相关部分。据我所知,其余代码应该不会影响这一点,但我不能确定,因为我对 ASP.Net

还是很陌生

将您的 page_load 代码放入 page_Init 部分。 asp 生命周期将使下拉列表 databind() 绝对毫无意义,如果它位于此处的页面加载部分,因为回发会导致整个页面重新提交自身到 page_load 点,并且由于您有如果不是 ispostback 语句,它将重新加载页面结构,但不会 运行 您的页面加载代码,这就是您失去价值的地方。除此之外,代码很好。

我解决了它,正如已经指出的那样,发布的代码不完整:下拉菜单位于 JQuery-ui 对话框内,这使得下拉菜单失去了它的状态。我最终得到了一个带有 Javascript 函数的解决方法,该函数将所选值复制到对话框外的隐藏字段,并在代码隐藏

中使用隐藏字段值