【问题标题】:RadioButtons CheckedChanged eventRadioButtons CheckedChanged 事件
【发布时间】:2011-06-30 19:28:20
【问题描述】:

我在页面上有 20 个单选按钮,我想知道其中一个被点击了。

protected void Page_Load(object sender, EventArgs e)
{
    Button newBTN = new Button();

    newBTN.Text = "Button 1";
    PlaceHolder1.Controls.Add(newBTN);
    for (int i = 0; i < 20; i++)
    {
       RadioButton r = new RadioButton();
       r.ID = i.ToString();
       r.CheckedChanged += RadioButton1_CheckedChanged;
       PlaceHolder1.Controls.Add(r);
    }
}

新更新的代码。注意:代码与上述代码无关。

      public List<int> ThreadID2Treat { get { return ViewState["Checked"] == null ? null : (List<int>)ViewState["Checked"]; } set { ViewState["Checked"] = value; } }
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)

{

var rad = (CheckBox)sender;
int threadID = int.Parse(rad.ID.ToString());
ThreadID2Treat.Add(threadID); 

}

public void DeleteButton_Clicked(object sender, EventArgs e)
{
    foreach (var item in ThreadID2Treat)
    {
        UsefulStaticMethods.DeleteThreads(item);
    }
}

我怎么知道?

【问题讨论】:

    标签: c# asp.net controls


    【解决方案1】:
    var rad = (RadioButton)sendder;
    Response.Write("RadioButton Id :" + rad.Id.ToString());
    

    你可以试试上面的。

    更新:
    要获取 PlaceHolder 中的所有选择单选按钮,请确保未在单选按钮上设置 AutoPostBack。您不需要添加 CheckChanged 事件。 “r.CheckedChanged += RadioButton1_CheckedChanged;”

    StringBuilder stringBuilder = new StringBuilder();
        foreach (var control in placeHolder1.Controls)
        {
            var rad = control as RadioButton;
            if (rad != null)
            {
                if (rad.Checked)
                    stringBuilder.AppendLine(String.Format("Radion Button Checked : {0}", rad.ID));
            }
        }
    
        Response.Write(stringBuilder.ToString());
    

    【讨论】:

    • 我一共检查了几个,比如说其中 4 个.. 然后我怎么能把它们都写在屏幕上?
    • 我建议你使用复选框列表。
    • 不幸的是我不能,那个控件什么时候触发?...我点击的最后一个单选框..然后它的事件触发..我可以将所有字符串作为列表放在一个集合中然后迭代将它们全部打印出来......所以如果我单击单选按钮 1,我可以将其放入列表中,如果我单击单选按钮 2,我也可以将其添加到列表中吗?
    • 给我两分钟,我会更新答案。
    • 所以,如果我点击多次......可以说,我检查 5 个单选按钮是否会在 page_load 方法和按钮事件之后触发 5 个单选按钮?
    【解决方案2】:

    使用参数sender,您可以直接引用事件源控件。

    var rb = (RadioButton)sender;
    

    如果你想直接触发这个事件和回发,你必须将RadioButton的AutoPostBack-Property设置为true

    【讨论】:

    • checkedchange 事件究竟是什么时候触发的。当我检查它时,我没有看到完整的回复?
    • 您必须将AutoPostback 设置为true
    • 我知道,我不想......那个事件什么时候触发......在 page_load..right 之后
    • @Dmitry:是的,事件在 page_load 之后和 load_complete 之前处理。查看here 以获取有关页面生命周期的更多信息。
    • 我认为按钮事件在单选框之前触发..或者我错了吗?
    【解决方案3】:
     protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (sender is RadioButton)
            {
    
                RadioButton radioButton = (RadioButton)sender;
                //Code to use radioButton's properties to do something useful.
                // get the radio button by its ID
                string id = radioButton.ID;  
    
    
    
            }
        }
    

    【讨论】:

    • 该事件是在 Page_Load 之前还是之后触发的?
    • 我可以知道该事件是否在生成完整回发/的按钮单击事件之后触发吗?
    • 此事件将在 Page_Load 之后触发。
    【解决方案4】:

    你可以试试这个。

    RadioButton r = sender as RadioButton;
    Response.Write(r.Id);
    

    【讨论】:

    • r.ID,他没有设置控件名称。
    • 当我检查时没有完整的回发..正确..!?!?当我点击按钮然后有回发..然后我得到ID的值..我对吗?
    • 如果您需要在单击单选按钮时进行回发,则需要将 autoPost back 属性设置为 true。
    【解决方案5】:

    将发送者转换为 RadioButton:

    RadioButton r = sender as RadioButton;
    if(r != null)
    {
        //Do stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2015-11-08
      • 2015-11-04
      • 1970-01-01
      • 2021-04-21
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多