【问题标题】:RadioButtonList SelectedIndexChanged event not firingRadioButtonList SelectedIndexChanged 事件未触发
【发布时间】:2012-05-11 22:59:59
【问题描述】:

我在 asp 视图控件上有单选按钮列表。我在运行时动态填充单选按钮列表。但 selectedindexchange 事件未触发。我尝试启用自动回发,page.oninit 但它没有触发。

<asp:MultiView ID="MultiView1" runat="server">
            <asp:View ID="View1" runat="server">
                <br />
                <asp:Label ID="Label1" runat="server" Text="Label" CssClass="text"></asp:Label>
                &nbsp;<asp:Label ID="Label2" runat="server" Text="Label" CssClass="text"></asp:Label>

                <br />
               <asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True" 
                    onselectedindexchanged="RadioButtonList1_SelectedIndexChanged1">
                </asp:RadioButtonList>
                <br />

                <p align="center">
                    <asp:Button ID="Button1" runat="server" Text="Previous" onclick="Button1_Click" Width="100px" />&nbsp;&nbsp;&nbsp;&nbsp;
                    <asp:Button ID="Button2" runat="server" Text="Next" onclick="Button2_Click" Width="100px" />
                </p>


            </asp:View>
    </asp:MultiView>

我的 onpage_load 代码

if (!IsPostBack)
        {
            cnn.Open();
            cmd.Connection = cnn;

            cmd.CommandText = "SELECT ")";
            adp.SelectCommand = cmd;
            adp.Fill(ds);
            cnn.Close();

            dt = new DataTable("Answered");
            dt.Columns.Add("Serial", typeof(int));
            dt.Columns.Add("question", typeof(string));
            dt.Columns.Add("opt1", typeof(string));
            dt.Columns.Add("opt2", typeof(string));
            dt.Columns.Add("opt3", typeof(string));
            dt.Columns.Add("opt4", typeof(string));
            dt.Columns.Add("answer", typeof(int));
            dt.Columns.Add("selected", typeof(int));

            foreach (DataRow r in ds.Tables[0].Rows)
            {
                dr = dt.NewRow();
                dr["Serial"] = dt.Rows.Count + 1;
                dr["question"] = r["question"];
                dr["opt1"] = r["opt1"].ToString();
                dr["opt2"] = r["opt2"].ToString();
                dr["opt3"] = r["opt3"].ToString();
                dr["opt4"] = r["opt4"].ToString();
                dr["answer"] = Convert.ToInt16(r["answer"].ToString());
                dr["selected"] = -1;
                dt.Rows.Add(dr);
            }
            Session["Answered"] = dt;
            Show();
        }

【问题讨论】:

  • 也许您也在回发时对 RadioButtonList 进行数据绑定。只做if(!IsPostBack)
  • 为什么要在Session中存储DataTable?为什么要将 DataTable 从一个复制到另一个?请注意,使用 DataAdapter 时不需要打开/关闭连接。如果出现错误,您的连接将保持打开状态,因为您没有使用 using-statement 或 try/catch/finally。 Show() 是什么意思?
  • 我正在开发在线考试模块以保存用户状态和计算结果,我在会话中保存数据表。

标签: c# asp.net .net


【解决方案1】:

可能是您丢失了RadioButtonList 的事件处理程序。您可以通过在设计视图中双击它来创建它。这将为它创建事件处理程序。

【讨论】:

    【解决方案2】:

    我很确定您在回发时也重新绑定了RadioButtonList。只做if(!IsPostBack)

    protected void Page_Load(Object sender, EventArgs e)
    {
        if(!IsPostBack) 
            BindRadioButonList();
    }
    

    否则不会触发事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      相关资源
      最近更新 更多