我已经无数次地发现了这个问题,但答案对我没有用处:
我有asp:Dropdownlist
动态绑定asp:Objectdatasource
。按钮调用代码隐藏功能来存储所选值。但是,在单击事件函数中,由于在单击事件处理程序之前调用的回发,下拉列表的值始终会重置为默认值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
方法或Page_Load
方法!IsPostBack
之后,这对我没有帮助。
另外一个免责声明:这是一个遗留项目,有更多的代码(相关的代码是新的),但我试图删除相关的位。据我所知,其余的代码不应该影响这一点,但我不能确定,因为我仍然是ASP.Net的新手
答案 0 :(得分:0)
将page_load代码放入page_Init部分。 asp生命周期将使下拉列表databind()在此处的页面加载部分中完全没有意义,因为Postback导致整个页面重新提交到page_load点,并且因为你有if if ispostback语句,它将重新加载页面结构,但不会运行您的页面加载代码,这是您失去价值的地方。除此之外,代码还可以。
答案 1 :(得分:0)
我解决了它,正如已经指出的那样,发布的代码是不完整的:下拉列表在JQuery-ui对话框中,这使得下拉列表失去了它的状态。我最终得到了一个使用Javascript函数的解决方法,该函数将所选值复制到对话框外的隐藏字段并使用代码隐藏中的隐藏字段值