禁用clientidmode

时间:2012-07-03 13:09:34

标签: c# asp.net html radio-button

我有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的{​​{1}}属性会自动生成,但我的转发器中所有单选按钮的名称属性应该相同,以便它们可以像一组&amp;根据该组中的其他元素自动检查/取消选中,那么我该如何克服这种情况?

修改

我自己解决了这个问题,实际上我已将输入无线电控制定义为input radio "SelectRadio",因为我认为runat="server"绑定不起作用但我错了Eval()绑定确实有效没有Eval(),所以当我删除该属性名称时,并不会自动生成,现在一切都很好,但是对于所有人来说,为了我的问题而节省时间。

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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在评论中引起我的注意。

答案 2 :(得分: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相关的功能并提高格式灵活性,那么第一种格式(与您提供的格式几乎相同)是您最好的选择。祝你好运!

答案 3 :(得分:0)

另一种选择是将ClientIDMode设置为“static”,将其值设置为指定ID的值。由于它是转发器控件,因此生成的所有项目将具有相同的生成ID。所以你只需设置:

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

这意味着所有生成的控件都将具有指定的相同ID,即“SelectRadio”。这可能有问题,也可能没有问题,你应该小心,这正是你想要的。

请注意,ClientIDMode是ASP.Net 4.0的一项功能。更多信息:ClientIDMode in ASP.NET 4.0和此处:MSDN。我希望这会有所帮助。

更新1: 您可以通过之前在StackOverflow上提出的this问题获得更多见解。 (虽然这是jQuery)。