LinqDataSource“OnSelecting”事件未在Post-backs上触发

时间:2010-09-20 18:49:03

标签: linqdatasource

我有一个带有两个下拉列表控件的网页,每个控件都绑定到单独的LinqDataSource对象。一个显示类别列表,另一个显示文章列表。类别选择驱动文章列表(至少,这是我的预期行为)。文章列表也会根据用户语言首选项进行过滤,存储在会话中并应用于ArticleLinqDataSource_Selecting事件处理程序。

<asp:Label runat="server" Text="Category Code:" AssociatedControlID="CategoryDropDownList" />
<asp:DropDownList runat="server" ID="CategoryDropDownList" DataSourceID="CategoryLinqDataSource" DataValueField="CategoryID" DataTextField="CategoryCode" AutoPostBack="true" />
...
<asp:Label runat="server" Text="Article Code:" AssociatedControlID="ArticleCodeDropDown" />
<asp:DropDownList runat="server" ID="ArticleCodeDropDown" DataSourceID="ArticleLinqDataSource" DataValueField="ArticleID" DataTextField="ArticleCode" OnDataBound="ArticleCodeDropDown_DataBound" />
 ...
<asp:LinqDataSource runat="server" ID="CategoryLinqDataSource" 
  ContextTypeName="Article.Data.ArticleDataContext"
  TableName="Categories" Select="new (CategoryID, CategoryCode)">
</asp:LinqDataSource>
...
<asp:LinqDataSource runat="server" ID="ArticleLinqDataSource" 
  ContextTypeName="Arcicle.Data.ArticleDataContext"
  TableName="Articles" OrderBy="ArticleCode"
  Select="new (ArticleID, ArticleCode)"
  OnSelecting="ArticleLinqDataSource_Selecting">
</asp:LinqDataSource>

首次加载页面时,这一切都正常。 “类别”列表包含所有可用的类别值,并且选择列表中的第一个类别。第一类的相应文章在文章下拉控件中正确显示。但是,当我更改类别(因为我将其设置为AutoPostBack="true"而发生回发时,文章下拉列表不会刷新。换句话说,OnSelecting事件不会在后续回发中被触发。这是预期的行为?如果是的话,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要在CategoryDropDownList的SelectedIndexChanged事件中的DropDownList上调用DataBind。它本身并不会发生。

e.g。

Protected Sub CategoryDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CategoryDropDownList.SelectedIndexChanged
        ArticleCodeDropDown.DataBind()
End Sub