所以我在页面上有这个asp:DropDownList。它呈现如下(在IE7中):
<select name="ctl00$cphFilter$cbLista" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphFilter$cbLista\',\'\')', 0)" id="ctl00_cphFilter_cbLista" class="agsSelect">
<option selected="selected" value="4350">A</option>
<option value="4352">B</option>
<option value="4349">C</option>
<option value="4348">D</option>
然后我在同一页面上有一个网格和一个按钮。当用户单击按钮时,读取下拉列表的选定项(数据源对象读取它),并且网格在跳转到DB之后执行数据绑定,在数据库中根据所选值获取一些数据。
大部分时间都可以正常使用。但有时候,即使渲染页面显示A是所选项目,下拉列表中的选择似乎也会丢失。
数据源对象的定义如下:
<asp:ObjectDataSource ID="dsVM" runat="server" EnablePaging="False" SelectMethod="Select" SortParameterName="sort" TypeName="X.Business.Entities.LPVM.BE">
<SelectParameters>
<asp:ControlParameter Name="listaId" Type="Int32" ControlID="cphFilter$cbLista" PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
为什么网格会使用选择参数0而不是下拉列表的选定值重新加载数据?
修改 假设下拉列表已绑定,用户选择了B并且网格也被绑定并显示正确的数据。现在,我等待2分钟,然后单击“刷新”按钮。令人惊讶的是,在这个特定的时刻dropdownlist.SelectedValue(我之前已经知道它是4352,因为它在渲染页面中看起来是这样的)实际上是一个空字符串。价值在哪里?
答案 0 :(得分:0)
在gridview数据绑定时,您的下拉列表没有绑定,因此下拉列表当时不包含值,并且0值传递给objectdatasource。在您的gridview数据绑定之后,您的下拉数据绑定被调用,您将在下拉列表中看到该项,您需要设置数据绑定层次结构,如
DropDownList1.DataBind();
GridView1.DataBind();
答案 1 :(得分:0)
你提到网格在回发上做了一个数据绑定。如果您使用gridview的数据源,则不需要重新绑定它。在回发后,asp.net将为您做到这一点。
如果您在回发时手动重新绑定,您是否检查过您是否意外重新绑定可能重置该值的DropDownList?
答案 2 :(得分:0)
可能的原因可能是您的SessionState在一段时间后刷新,例如60秒。您所做的选择将消失,因为该值不再保留在缓存中。