Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用ClientMode_C#_Asp.net_Html_Radio Button - Fatal编程技术网

C# 禁用ClientMode

C# 禁用ClientMode,c#,asp.net,html,radio-button,C#,Asp.net,Html,Radio Button,我有一个这样的中继器 <asp:Repeater runat="server" DataSourceID="HeaderFooterSqlDataSource"> <HeaderTemplate> <table border="0" width="100%"> </HeaderTemplate> <ItemTemplate> <

我有一个这样的中继器

    <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>

现在,当这个
中继器
被渲染时,我的
输入单选“SelectRadio”
名称属性自动生成,但是中继器中所有单选按钮的名称属性应该相同,以便它们可以像一个组一样工作&根据该组中的其他元素自动检查/取消检查,那么我该如何克服这种情况呢

编辑


我自己得到了解决方案,实际上我已经将我的输入无线电控制定义为
runat=“server”
,因为我认为否则
Eval()
绑定将不起作用,但我错了
Eval()
绑定在没有
runat=“server”
的情况下确实起作用,所以,当我删除属性名时,它不会自动生成,现在一切都好了,但为了节省时间回答我的问题,我向所有人致谢

您应该使用内置控件,而不是对此进行黑客攻击


项目1
项目2
项目3
项目4
项目5
项目6

单选按钮不作为组的原因是,您有runat=“server”,这将导致名称和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>
<asp:RadioButtonList ID="uxRadioButtons" runat="server">
</asp:RadioButtonList>
但是,以下情况不会作为一个有凝聚力的群体:

<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>

这不会给您提供粒度控制,但会提供对选择的轻松服务器端访问。如果您只需要与javascript相关的功能和增加的格式灵活性,那么第一种格式(与您提供的格式几乎相同)可能是您的最佳选择。祝你好运

您想查看
asp:RadioButton
控件(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.radiobutton.aspx)

特别是,此控件上的
GroupName
属性可用于“指定单选按钮分组以创建一组互斥的控件”

粗略地说:

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

在最后的社区内容中讨论了它,但归根结底,它使用当前的NamingContainer作为其名称的一部分,而不仅仅是使用您给它的groupname。感谢神秘的用户1429080在评论中提醒了我这一点。

另一个选项是将ClientIDMode设置为“static”,这将把它的值设置为指定ID的值。由于它是一个中继器控件,因此生成的所有项都将具有相同的生成ID。因此您只需设置:

<asp:RadioButton runat="server" id="SelectRadio" GroupName="HeaderFooter" ClientIDMode="static">' />
这里:。我希望这有帮助

更新1:
您可以从StackOverflow之前提出的问题中获得更多见解。(这是jQuery)。

实际上我不需要在单选按钮旁边显示文本,我在中继器中有更多的列,我没有在这里发布,简而言之,中继器是必须的。我想你已经明白了,我输入的单选控件的
NAME
属性会自动生成,因为它位于数据绑定控件(中继器)中,由于该单选控件的所有实例都具有唯一的名称,因此由于该唯一性,它们的行为不像一个组,我可以一次检查多个单选按钮,这是错误的,因为我希望一次检查一个单选按钮,这是一种正常行为。这不是您应该经历的行为。“name”/“id”仅为基于runat=“server”的控件生成,客户端控件(例如)不接受相同的处理,因此将按照您的编码进行分组。如果在示例中删除runat=“server”,则代码将作为一个组工作。如果您需要服务器端处理您的选择,但仍然需要灵活性,我建议您使用jQuery ajax调用或老式的doPostBacks?更新的答案,以便为未来用户澄清。很高兴你“自己找到了解决方案”。@JTorres:请更正你的评论“ASP.NET使用RadioButtonList来克服这个问题”:严格来说,这不是真的。RadioButtonList是一种方法,但RadioButton仅使用组名就可以自己完成。我可以想象,不同之处在于,使用GroupName时,单选按钮不必彼此相邻,而我希望RadioButtonList能够以更好的方式找到所选的单选按钮,而无需查询所有单选按钮…@Chris也许我可以更清楚,但“this”我指的是基于单个数据源生成radiobutton组,因为这似乎是必需的。据我所知,RadioButtonList是使用OOTB控件进行此操作的唯一方法。它在中继器中不起作用。中继器将为每个单选按钮生成一个新名称。如果选择了GroupName,则应为所有单选按钮使用相同的名称。你确认你描述的行为了吗?如果它们不是同一命名容器的所有子对象,那么您可能会遇到麻烦,但在上面的示例中,它应该可以工作,因为在生成输入名称的Radiobutton的内部
UniqueGroupName
属性中检查组名。repeater的项模板是命名容器。我对它进行了测试,它确实为每个单选按钮生成了一个新名称。我认为它那样做是错误的,但它就是这样做的……哦,当然。我以为repeater会是一个命名模板,但忘记了itemtemplate会是。愚蠢的我。我必须承认,我对它使用命名容器名称感到非常惊讶,因为它确实违背了它的观点,但您是对的,在这种情况下,这将不起作用。我想知道这是否被认为是一个已知的错误。。。。
    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();
    }
<asp:RadioButton runat="server" id="SelectRadio"
 GroupName="HeaderFooter" %>' />
<asp:RadioButton runat="server" id="SelectRadio" GroupName="HeaderFooter" ClientIDMode="static">' />