2009-10-16 113 views
0

所以我在页面上有这个asp:DropDownList。它呈现像这样(在IE7中):为什么在一段时间后Combo.SelectedValue会丢失

<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> 

然后我在同一页上有一个网格和一个按钮。当用户单击按钮时,将读取下拉列表中选定的项目(以及数据源对象读取的内容),网格在访问数据库后执行数据绑定,从而根据所选值获取一些数据。

这在大多数情况下工作正常。但有时,即使呈现的页面显示A是选定的项目,下拉列表中的选择似乎也会丢失。

DataSource对象的定义如下:

<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

在gridview数据绑定的时候,你的下拉没有绑定,所以dropdown在那时不包含值,0值传递给objectdatasource。你的GridView数据绑定后,您的下拉数据绑定叫,你会看到在下拉列表中的项目,你需要lookover数据绑定层次,像

DropDownList1.DataBind(); 
     GridView1.DataBind(); 
+0

那么,当我点击按钮时,我调用gridview.DataBind()。在此之前我无法调用dropdownlist.DataBind(),因为那时我失去了我的选择。 – tzup 2009-10-16 11:53:02

+0

@tzup;你能解决这个问题吗? – 2011-08-21 00:54:23

0

你提到电网的确在回发一个数据绑定。如果您使用的是GridView的数据源,则不需要重新绑定它。在回发asp.net将为您做到这一点。

如果您在回发时手动重新绑定,是否检查过您是否意外重新绑定了可重置该值的DropDownList?

+0

我正在使用我的GridView的数据源和我前面提到的“刷新”按钮的OnClick处理程序做一个grid.Databind()调用(它调用数据源的选择与参数dropdownlist.SelectedValue有时是0。 )我应该在刷新按钮的处理程序上调用其他的东西吗? – tzup 2009-10-16 11:04:19

0

可能的原因可能是您的SessionState在特定时间(如60秒)后正在刷新。您所做的选择将会消失,因为该值不再保存在缓存中。

相关问题