1

2 つのドロップダウン リスト コントロールを含む Web ページがあり、それぞれが個別の LinqDataSource オブジェクトにバインドされています。1 つはカテゴリのリストを表示し、もう 1 つは記事のリストを表示します。カテゴリの選択は、記事のリストを駆動します (少なくとも、それが私の意図した動作です)。記事リストは、ユーザーの言語設定に基づいてフィルター処理され、セッションに保存され、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 イベントは後続のポストバックで発生しません。これは予想される動作ですか?どうすればこれを回避できますか?

4

1 に答える 1

1

CategoryDropDownListのSelectedIndexChangedイベントのDropDownListでDataBindを呼び出す必要があります。それはそれ自体では起こりません。

例えば

Protected Sub CategoryDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CategoryDropDownList.SelectedIndexChanged
        ArticleCodeDropDown.DataBind()
End Sub
于 2010-10-21T00:29:41.953 に答える