12

ASP.Net 4.5では、SelectMethodプロパティを介してRepeaterなどのコントロールにデータをバインドする新しい方法が導入されています。

<asp:Repeater runat="server" ItemType="MyData.Reference" 
      SelectMethod="GetReferences">

Codebehindメソッドを呼び出します

public IEnumerable<Reference> GetReferences()

ネストされたリピーターのシナリオでは、このselectメソッドにパラメーターを渡して、外部リピーターのアイテムに応じて異なるデータをフェッチすることは可能ですか?

例:

<asp:Repeater runat="server" ItemType="MyData.Reference" 
        SelectMethod="GetReferences(Item.ID)">

呼び出す必要があります

public IEnumerable<Reference> GetReferences(int id)

これはItemDataBoundイベントを介して実現できることは知っていますが、SelectMethodとItemTypeのはるかに単純でクリーンな構文を使用したいと思います。

SelectMethodは、何らかの方法でパラメーターの受け渡しを許可しますか?

そうでない場合は、SelectMethod内の外側のRepeater Itemから値を取得する別のクリーンな方法はありますか?

4

4 に答える 4

9

答えを待っている間、私は少し遊んで、次の解決策を見つけました。

最善の方法ではないかもしれませんが、これまでのところ問題は見られず、非常に簡単なので、そのまま放り出します。

<asp:Repeater runat="server" ItemType="MyData.Reference" 
     DataSource='<%# GetReferences(Item.ID) %>'>

基本的に、ここで行うことは を に置き換えることですSelectMethod( DataSourceIntellisense はそれを提案しませんが、それでも機能します)。

このようにして、値を GetReferences メソッドに渡し、その戻り値をモデル バインディングに使用できます。

これまでのところ、これは私が遭遇した最短のソリューションです。

于 2012-10-09T18:57:22.680 に答える
6

方法は次のとおりです。

外側のリピーターに隠しフィールドを配置し、内側のリピーターの selectmethod に名前を付けます。

<asp:Repeater SelectMethod="GetTopLevelStuff">
   <ItemTemplate>       
       <asp:HiddenField runat="server" ID="ItemId" Value="<%# Item.ID %>"/>
       <asp:Repeater SelectMethod="GetSubItems">
           <ItemTemplate>Template code for sub-items here</ItemTemplate
       </asp:Repeater>
   </ItemTemplate
</asp:Repeater>

次に、あまり文書化されていないマジックを次に示します。

 public IQueryable<SubItem> GetSubItems([Control("ItemId")] int itemId)
    {
        return yourDataStore.GetSubItems(itemId);
    } 

この場合の valueprovider はプロパティ名も取ることができ、リストボックスを使用して "SelectedValue" を取得する場合に便利です。

私はあなたの質問を見つけて、あなたがしたように、代わりにこのソリューションを試しました。

于 2013-02-15T13:31:47.057 に答える
2

演習 1: ASP.NET Web フォームでのモデル バインディング -> タスク 3 – モデル バインディングでの値プロバイダーのチュートリアルをご覧ください。

SelectMethod シグネチャ内である種のコントロール選択パラメータを定義することができます。

于 2012-10-09T18:15:47.833 に答える
1

バリュー プロバイダーを使用できます

例:

public IQueryable<Category> GetCategories([Control]int? minProductsCount)
{
}

これは ValueProviders のリストです:

  • CompositeValueProvider。インターフェイスを実装する値プロバイダーのリストから値が取得される値プロバイダーを表しIEnumerableます。

  • QueryStringValueProviderオブジェクトに含まれるクエリ文字列の値プロバイダーを表しNameValueCollectionます。

  • RouteDataValueProviderインターフェイスを実装するオブジェクトに含まれるルート データの値プロバイダーを表しIDictionary(Of TKey, TValue)ます。

  • ControlValueProviderコントロール値の値プロバイダーを表します。

  • CookieValueProvider Cookie 値の値プロバイダーを表します。

  • FormValueProviderフォーム値の値プロバイダーを表します。

  • ProfileValueProviderプロファイル値の値プロバイダーを表します。

  • UserProfileValueProviderユーザー プロファイルの値プロバイダーを表します。

  • ViewStateValueProviderビュー ステート値の値プロバイダーを表します。

于 2012-10-09T18:36:37.677 に答える