0

Page_Init メソッドで動的コントロールを生成する WebForms アプリケーションがあります。コントロールの 1 つは、アイテムを動的に入力する HtmlSelect コントロールです。これがページにレンダリングされると、通常の jQuery コードを実行して、各リスト項目の横にあるチェックボックスでこのコントロールを設定します。

        $("select[id*='team_filter']").multiselect({
          nonSelectedText: 'All',
          numberDisplayed: 1,
          nSelectedText: 'selected',
          allSelectedText: 'All'
        });

次に、ユーザーはいくつかの項目をチェックして、ページを投稿します。

ポストバックの Page_Load イベントで、次のコードを使用して、いくつかの項目の Selected プロパティを確認します。

            HtmlSelect ctrl = (HtmlSelect)this.FindControlRecursive("team_filter_1");                
            var firstGame = ctrl.Items.FindByValue("game_1").Selected;
            var secondGame = ctrl.Items.FindByValue("game_2").Selected;

奇妙なことに、ユーザーが複数のオプションをチェックすると、最初のオプションのみが Page_Load で true を返し、残りはすべて false として返されます。他のすべてのチェックされた項目の ViewState がサーバーに返されないようです。

これが Page_Init にあるものです。これらは動的コントロールであることを覚えておいてください。したがって、Init に配置する必要があります。

                HtmlSelect teamfilter = new HtmlSelect();
                teamfilter.ID = "team_filter_" + studioId;
                teamfilter.Attributes.Add("class", "col-md-9");
                teamfilter.Attributes.Add("multiple", "true");

                ListItem listItem = new ListItem("All " + studioName, "studio_" + studioId);
                listItem.Attributes.Add("data-type", "studio");
                teamfilter.Items.Add(listItem);

                listItem = new ListItem("All Games", "game_0_" + studioId);
                listItem.Attributes.Add("data-type", "game");
                teamfilter.Items.Add(listItem);
4

1 に答える 1

0

HtmlSelect の Multiple プロパティを true に設定してみてください。

teamfilter.Multiple = true;
于 2015-06-20T01:30:22.080 に答える