1

私はRepeaterこのようなものを持っています

    <asp:Repeater runat="server" DataSourceID="HeaderFooterSqlDataSource">
        <HeaderTemplate>
            <table border="0" width="100%">
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
            <input runat="server" id="SelectRadio" type="radio" 
 name="HeaderFooter" onclick='SelectAndSetHeaderFooter(this);" %>' />
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>

これRepeaterがレンダリングされるnameと、私の属性input radio "SelectRadio"は自動生成されますが、リピーターのすべてのラジオボタンの名前属性は同じである必要があります。これにより、グループのように機能し、そのグループの他の要素に従って自動的にチェック/オフになります。この状況を克服できますか?

編集

私は自分で解決策を見つけました。実際には、入力無線制御を定義しました。runat="server"そうしないとバインディングが機能しないと思ったのEval()ですが、間違ったEval()バインディングは機能しませrunat="server"ん。したがって、その属性名を削除すると、属性名は自動的に生成されず、すべてが正常です。さて、しかし私の質問のために時間を割いてくれたすべての人に感謝します。

4

4 に答える 4

1

これをハッキングする代わりに、組み込みのRaidoButtonListコントロールを使用する必要があります。

<asp:RadioButtonList id="RadioButtonList1" runat="server">
    <asp:ListItem>Item 1</asp:ListItem>
    <asp:ListItem>Item 2</asp:ListItem>
    <asp:ListItem>Item 3</asp:ListItem>
    <asp:ListItem>Item 4</asp:ListItem>
    <asp:ListItem>Item 5</asp:ListItem>
    <asp:ListItem>Item 6</asp:ListItem>
</asp:RadioButtonList>
于 2012-07-03T13:32:04.553 に答える
1

asp:RadioButtonコントロール(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.radiobutton.aspx)を調べます。

特に、GroupNameこのコントロールのプロパティは、「相互に排他的なコントロールのセットを作成するためのラジオボタンのグループ化を指定する」ために使用できます。

大まかに言えば:

<asp:RadioButton runat="server" id="SelectRadio"
 GroupName="HeaderFooter" %>' />

編集:この特定の状況では、GroupNameは設計されたとおりに機能しないようです。http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.radiobutton.groupname.aspxは、最後にコミュニティコンテンツでそれについて説明していますが、要約すると、現在のNamingContainerは、指定したグループ名を使用するだけでなく、名前の一部として使用されます。コメントでそれを私の注意を引いてくれた謎のuser1429080に感謝します。

于 2012-07-03T13:53:35.400 に答える
0

ラジオボタンがグループとして機能しない理由は、runat = "server"があるためです。これにより、name属性とid属性の前に親のIDが追加されます。次の場合、ラジオボタンはまとまりのあるグループとして動作します(runat = "server"がないことに注意してください)。

ascxコード:

<asp:Repeater ID="uxRadioSelections" runat="server">
        <HeaderTemplate>
          <table border="0" width="300px">
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
              <td>
                <input type="radio" value='<%# Eval("Name") %>' name="HeaderFooter" onclick="alert(this.value);"><%# Eval("Name") %></input>
              </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
          </table>
        </FooterTemplate>
    </asp:Repeater>

背後にあるコード:

protected void Page_Load(object sender, EventArgs e)
{
   string[] names = new string[] {"Alvin", "Simon", "Theodore"};
   uxRadioSelections.DataSource = names.Select(x => new { Name = x });
   uxRadioSelections.DataBind();
}

ただし、以下はまとまりのあるグループとしては機能しません。

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    Test
    <asp:Repeater ID="uxRadioSelections" runat="server">
        <HeaderTemplate>
          <table border="0" width="300px">
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
              <td>
                  <asp:RadioButton Text='<%#Eval("Name") %>' runat="server" />
              </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
          </table>
        </FooterTemplate>
    </asp:Repeater>
</asp:Content>

あなたがほのめかした命名規則のために、これらの個々のラジオボタンはお互いを見つけることができません。ASP.NETは、RadioButtonListsを使用してこれを克服します。

ascxコード:

<asp:RadioButtonList ID="uxRadioButtons" runat="server">
</asp:RadioButtonList>

背後にあるコード:

    protected void Page_Load(object sender, EventArgs e)
    {
        string[] names = new string[] {"Alvin", "Simon", "Theodore"};
        uxRadioButtons.DataTextField = "Name";
        uxRadioButtons.DataValueField = "Name";
        uxRadioButtons.DataSource = names.Select(x => new { Name = x });
        uxRadioButtons.DataBind();
    }

これにより、きめ細かい制御はできなくなりますが、サーバー側で選択範囲に簡単にアクセスできるようになります。必要なのがjavascript関連の機能とフォーマットの柔軟性の向上だけである場合は、最初のフォーマット(提供したものとほぼ同じ)が最善の策かもしれません。幸運を!

于 2012-07-03T13:44:34.187 に答える
0

もう 1 つのオプションは、ClientIDMode を「静的」に設定することです。これにより、その値が指定された ID の値に設定されます。これはリピーター コントロールであるため、生成されるすべてのアイテムは同じ生成 ID を持ちます。したがって、次のように設定するだけです。

<asp:RadioButton runat="server" id="SelectRadio" GroupName="HeaderFooter" ClientIDMode="static">' />

これは、生成されたすべてのコントロールに同じ ID、つまり「SelectRadio」が指定されることを意味します。これは問題があるかもしれないし、そうでないかもしれません。

ClientIDMode は ASP.Net 4.0 の機能です。詳細はこちら: ASP.NET 4.0 の ClientIDModeおよびここ: MSDN。これが役立つことを願っています。

更新 1: StackOverflow で以前に尋ねられたこの質問から、より多くの洞察を得ることができます。(ただし、jQueryです)。

于 2017-03-12T12:33:24.560 に答える