asp.net中radiobutton 的问题 C#

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net中radiobutton 的问题 C#相关的知识,希望对你有一定的参考价值。

现在有两个radiobutton A、B
两个TextBox C、D
如何在选中A的时候C能用,D不能用,并且清空
在选中B的时候D能用,C不能用

求实例~~

楼上几位的太麻烦了吧。。还得用后台 每次改变都要刷新页面。。。
可以用JS 或者 Jquery 来实现的。。在前台就可以。一会给你发源码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>

<script src="../Js/jquery-1.4.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

function change1()
$("#C").attr("disabled", ""); //可用
$("#D").attr("value", ''); //清空内容
$("#D").attr("disabled", "disabled"); //不可用

function change2()
$("#C").attr("disabled", "disabled"); //BU可用
$("#C").attr("value", ''); //清空内容
$("#D").attr("disabled", ""); //可用


</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="A" type="radio" onclick="change1()" checked="checked" /><input id="B" type="radio"
onclick="change2()" /><input id="C" type="text" /><input id="D" type="text" disabled="disabled" />
</div>
</form>
</body>
</html>追问

等你的源码,最好简单些哈

参考技术A 在A和B两个radiobutton的事件里面,分别双击 CheckedChanged ,增加下面两个事件即可
private void A_CheckedChanged(object sender, EventArgs e)

if (A.Checked == true)

C.Enabled = true;
D.Text = "";
D.Enabled = false;



private void B_CheckedChanged(object sender, EventArgs e)

if (B.Checked == true)

D.Enabled = true;
C.Text = "";
C.Enabled = false;


不懂的话和我在线联系或者留言。
参考技术B TextBox_C TextBox_D为两个TextBox的id
双击A控件进入控件A的点击事件,在事件中写
TextBox_C.Enabled = true;
TextBox_D.Enabled = false;

双击B控件进入控件B的点击事件,在事件中写
TextBox_C.Enabled = false;
TextBox_D.Enabled = true;追问

CheckedChanged事件里是么?
我写了不管用啊,是不是还有别的没注意到的,aotupostback也设为true了,
你那里试了行么?

追答

试过的,没问题。你调试下看看

protected void RadioButtonB_CheckedChanged(object sender, EventArgs e)


TextBox_C.Enabled = false;
TextBox_D.Enabled = true;



protected void RadioButton_A_CheckedChanged(object sender, EventArgs e)


TextBox_C.Enabled = true;
TextBox_D.Enabled = false;

参考技术C 前台aspx页面
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:RadioButton ID="RadioButton1" runat="server"
oncheckedchanged="RadioButton1_CheckedChanged" Checked="true" GroupName="1" AutoPostBack="true" />
<asp:RadioButton ID="RadioButton2" runat="server"
oncheckedchanged="RadioButton2_CheckedChanged" GroupName="1" AutoPostBack="true" />

</div>
<p>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
</p>
</form>
</body>
</html>
后台cs文件
protected void Page_Load(object sender, EventArgs e)

if (!IsPostBack)

this.TextBox1.Enabled = true;
this.TextBox2.Enabled = false;



protected void RadioButton1_CheckedChanged(object sender, EventArgs e)

if (this.RadioButton1.Checked)

this.TextBox1.Enabled = true;
this.TextBox2.Enabled = false;




protected void RadioButton2_CheckedChanged(object sender, EventArgs e)

if (this.RadioButton2.Checked)

this.TextBox1.Enabled = false;
this.TextBox2.Enabled = true;


测试过了,完全可以
参考技术D 直接页面js。
后台代码。。不觉得累吗。。。

为啥 ASP.Net RadioButton 和 CheckBox 在 Span 内呈现?

【中文标题】为啥 ASP.Net RadioButton 和 CheckBox 在 Span 内呈现?【英文标题】:Why does ASP.Net RadioButton and CheckBox render inside a Span?为什么 ASP.Net RadioButton 和 CheckBox 在 Span 内呈现? 【发布时间】:2010-11-03 02:20:52 【问题描述】:

我希望这样:

<asp:CheckBox    ID="CheckBox1"    runat="server" CssClass="myClass" />
<asp:RadioButton ID="RadioButton1" runat="server" CssClass="myClass" />
<asp:TextBox     ID="TextBox1"     runat="server" CssClass="myClass" />

...像这样渲染 (为简单起见删除了一些属性)

<input id="CheckBox1"    type="checkbox" class="myClass" />
<input id="RadioButton1" type="radio"    class="myClass" />
<input id="TextBox1"     type="text"     class="myClass" /> 

...事实上,RadioButtonCheckBoxspan 标签包裹,并且 CSS 类被应用在那里。

<span class="myClass"><input id="CheckBox1"    type="checkbox" /></span> 
<span class="myClass"><input id="RadioButton1" type="radio"    /></span> 
<input type="text" id="TextBox1" class="myClass" /> 

这是有原因的吗?有办法避免吗?它使 jQuery 选择器变得丑陋,因为您无法捕获所有选择器:

$("input.myClass")

当然它只是:

$("input.myClass, span.myClass input")

...但这很难看。我可以编写自己的选择器,但还是没有应有的优雅。

【问题讨论】:

不是答案,只是表示同情——几年前我第一次开始在 .NET 平台上工作并使用 JS 找出复选框的值时,我花了几个小时试图弄清楚为什么我的价值观没有引起警觉。你猜怎么着——跨度标签。我一直想知道为什么 MS 为他们的单选按钮和复选框添加了冗余标签! @Hardwareguy 有时这是跨度,有时是输入。那就是问题所在。 $("input.myclass") 可能有点过于具体,但 $(".myClass") 会让你同样头疼。 如果您使用 Checkbox.Text 属性,则会添加一个标签。然后跨度将围绕它们,并且样式适用于两者。这就是周围跨度的原因。 可能是因为这样的事情:***.com/questions/7398462/… 对于 asp:checkbox,我注意到使用 CssClass 属性时也会添加跨度。 【参考方案1】:

在我找到 inputAttributes 属性之前,这也让我发疯了。

例如,这里是如何直接在复选框控件上添加一个类,而不需要跨度废话:

myCheckBoxControl.InputAttributes.Add("class", "myCheckBoxClass")

【讨论】:

如果可以,我会给 +100,因为我不能给 +1 :) 谢谢! 很好地找到了这个。另请注意,LabelAttributes 会相应地设置相应复选框标签的样式。 这很奇怪,因为myCheckBoxControl.Attributes.Add 将触发与myCheckBoxControl.CssClass 相同的行为,它将其包装在&lt;span&gt; 标记中,但myCheckBoxControl.InputAttributes.Add 不会 - 耶! 不幸的是,使用此方法添加的类不会在视图状态中捕获,而使用 CssClass 添加的类会在视图状态中捕获。 在哪里添加这个。我无法在 c# 后面的代码中获取 InputAttributes【参考方案2】:

System.Web.UI.WebControls 命名空间中的 Web 控件在不同浏览器中的呈现方式可能不同。你不能指望他们总是渲染相同的元素。他们可能会添加任何他们认为需要使其在特定浏览器中运行的内容。

如果您想控制控件如何呈现为 html,则应改用 System.Web.UI.HtmlControls 命名空间中的控件。那就是:

<input type="checkbox" id="CheckBox1" runat="server" class="myClass" />
<input type="radio" name="RadioButton1" runat="server" class="myClass" />
<input type="text" id="TextBox1" runat="server" class="myClass" />

它们将像相应的 html 元素一样呈现,没有添加额外的元素。这当然意味着您必须对浏览器的兼容性负责,而控件则不需要。此外,这些控件不具备 WebControls 命名空间中控件的所有功能。

【讨论】:

发生了多少回发,我认为这会更令人头疼。我同意我们应该默认使用这些控件,并在需要时升级到 WebControls。 如果你打算这样做,你还不如只使用 ASP.Net MVC ;) @womp 我希望这是一个选项。【参考方案3】:

默认情况下,每个 WebControl 都呈现为 &lt;span&gt; 标记,以及控件作者添加的任何自定义呈现。

在编写自定义 WebControl 时,您通常要做的第一件事就是覆盖“TagKey”属性以呈现 div 或跨度以外的其他内容。该属性的默认值为 HtmlTextWriterTag.Span。

您可以将您的复选框项目子类化并覆盖 TagKey 属性以呈现其他内容,但是您必须处理将所有复选框变成您自己的版本。

【讨论】:

我猜你必须选择你的毒药。丑陋的 jQuery 选择器或零星的子类控件以实现一致的渲染。如果 all 输入控件使用跨度呈现,我会很酷。一致性是一件不错的事情。【参考方案4】:

我遇到了这个问题,并尝试使用控制适配器解决它。

有关对单选按钮列表执行此操作的示例,请参阅 here。

我最终将它作为我的 RadioButtonAdaptor-

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;

public class RadioButtonAdapter : WebControlAdapter

    protected override void Render(HtmlTextWriter writer)
    
        RadioButton targetControl = this.Control as RadioButton;

        if (targetControl == null)
        
            base.Render(writer);

            return;
        

        writer.WriteBeginTag("input");
        writer.WriteAttribute("type", "radio");
        writer.WriteAttribute("name", targetControl.GroupName);
        writer.WriteAttribute("id", targetControl.ClientID);            

        if (targetControl.CssClass.Length > 0)
        
            writer.WriteAttribute("class", targetControl.CssClass);
              

        writer.Write(" />");

    

这已添加到我的浏览器文件中-

<browser refID="Default">
        <controlAdapters>            
            <adapter controlType="System.Web.UI.WebControls.RadioButton"
               adapterType="RadioButtonAdapter" />
        </controlAdapters>
</browser>

当然,这也有一些缺点。与the above link 中提到的那些一样,如果您不隐含所有内容,您也会失去功能(上面的代码不允许检查单选按钮)。有一些 CSS 友好的控件适配器,但它们不包括单选按钮控件。或许可以使用Reflector来获取默认的控制适配器作为起点。

【讨论】:

我喜欢这个建议!我知道迟到的评论,但这对我今天帮助很大!【参考方案5】:

普通的 RadioButton 通常在没有跨度的情况下呈现。如果设置了 CssClass、Style、Enabled 属性,RadioButton 会以跨度呈现。当我需要使用客户端脚本操作单选按钮时,这种不一致是一个真正的痛苦。我通常做的是应用一个虚拟的 CssClass,以便它始终一致地呈现一个跨度。

【讨论】:

【参考方案6】:

我认为最好的方法是:

public class HtmlTextWriterNoSpan : HtmlTextWriter public HtmlTextWriterNoSpan(TextWriter textWriter) : base(textWriter) protected override bool OnTagRender(string name, HtmlTextWriterTag key) if (name == HtmlTextWriterTag.Span) return false; return base.OnTagRender(name, key);

在自定义控件中使用它:

protected override void Render(HtmlTextWriter writer) writer = new HtmlTextWriterNoSpan(writer); base.Render(writer); // HERE MORE CODE

【讨论】:

我喜欢那个【参考方案7】:

发现类似问题,写了一个简单的基于jQuery的函数来启用/禁用复选框和父跨度

function resetChk(ctl, bEnable)  

            if (bEnable)
                ctl.removeAttr('disabled').parent().removeAttr('disabled');
            else
                ctl.attr('disabled', true).parent().attr('disabled', true);
            

        

【讨论】:

以上是关于asp.net中radiobutton 的问题 C#的主要内容,如果未能解决你的问题,请参考以下文章

asp.net(C#)怎样将listview中的radiobutton设置成互斥?

ASP.NET C#中Radiobutton控件的疑问

如何在 ASP.Net MVC 的 EditorTemplates 中显示一个 RadioButtons 组(3)

ASP.NET中RadioButton与Button的使用

向 asp.NET RadioButton 控件添加自定义属性

ASP.NET RadioButton 与名称(组名)混淆