【问题标题】:Autopostback is not working for the first time in ASP.NET?Autopostback 第一次在 ASP.NET 中不起作用?
【发布时间】:2013-02-25 06:05:05
【问题描述】:

我在更新面板中使用了 5 个单选按钮,但是当我第一次检查单选按钮时,它不会更改为选中状态。之后意味着第二次检查它的工作正常,所以请告诉应该是什么问题。 这是我的代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
   <ContentTemplate>
       <asp:RadioButton ID="rbtn_A" runat="server" GroupName="rbt" 
            AutoPostBack="true" OnCheckedChanged="rbtn_A_CheckedChanged" />
       <asp:RadioButton ID="rbtn_B" runat="server" GroupName="rbt" AutoPostBack="true"
            OnCheckedChanged="rbtn_B_CheckedChanged" />
       <asp:RadioButton ID="rbtn_C" runat="server" GroupName="rbt" AutoPostBack="true" 
            OnCheckedChanged="rbtn_C_CheckedChanged" />
       <asp:RadioButton ID="rbtn_D" runat="server" GroupName="rbt" AutoPostBack="true" 
            OnCheckedChanged="rbtn_D_CheckedChanged" />
   </ContentTemplate>

这是我的第一个单选按钮 c# 函数: protected void rbtn_A_CheckedChanged(对象发送者,EventArgs e) {

        foreach (GridViewRow gv in dl_ques.Rows)
        {
            Label lblTest = (Label)gv.FindControl("lbltest");
            Label lbl = (Label)gv.FindControl("lbl_qno");
            RadioButton rbtn_A = (RadioButton)gv.FindControl("rbtn_A");
            DataSet ds = new DataSet();
            ds = getAnswer();
            SqlCommand cmd1 = DataManager.getCommandSp("spGetIBPSTestQues");
            cmd1.Parameters.AddWithValue("@Test_id", Convert.ToInt32(lblTest.Text));
            DataSet dsorg = DataManager.getDataSet(cmd1);
            if (ds.Tables[0].Rows.Count > 0)
            {
                SqlCommand cmd = new SqlCommand();
                cmd = DataManager.getCommandSp("SpUpdateIBPSTestSolved");
                cmd.Parameters.AddWithValue("@user_id", Convert.ToInt32(ht["UId"]));

                cmd.Parameters.AddWithValue("@Ans", "A");
                foreach (DataRow dr in dsorg.Tables[0].Rows)
                {
                    if (Convert.ToInt32(lbl.Text) == Convert.ToInt32(dr["actual_que"]))
                    {
                        if (dr["actual_ans"].ToString() == "A")
                        {
                            cmd.Parameters.AddWithValue("@Ans_correct", "Yes");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@Ans_correct", "No");
                        }
                    }
                }
                cmd.Parameters.AddWithValue("@test_id", Convert.ToInt32(lblTest.Text));
                cmd.Parameters.AddWithValue("@Test_dt", DateTime.Now);
                cmd.Parameters.AddWithValue("@Ques_id", lbl.Text);
                cmd.Parameters.AddWithValue("@LastTimeMin", timehdnmin.Value);
                cmd.Parameters.AddWithValue("@LastTimeSec", timehdnsec.Value);

                DataManager.WriteToDb(cmd);

            }
            else
            {
                SqlCommand cmd = new SqlCommand();
                cmd = DataManager.getCommandSp("SpInsertIBPSTestSolved");
                cmd.Parameters.AddWithValue("@user_id", Convert.ToInt32(ht["UId"]));

                cmd.Parameters.AddWithValue("@Ans", "A");
                foreach (DataRow dr in dsorg.Tables[0].Rows)
                {
                    if (Convert.ToInt32(lbl.Text) == Convert.ToInt32(dr["actual_que"]))
                    {
                        if (dr["actual_ans"].ToString() == "A")
                        {
                            cmd.Parameters.AddWithValue("@Ans_correct", "Yes");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@Ans_correct", "No");
                        }
                    }
                }

                cmd.Parameters.AddWithValue("@test_id", Convert.ToInt32(lblTest.Text));
                cmd.Parameters.AddWithValue("@Test_dt", DateTime.Now);
                cmd.Parameters.AddWithValue("@Ques_id", lbl.Text);
                cmd.Parameters.AddWithValue("@LastTimeMin", timehdnmin.Value);
                cmd.Parameters.AddWithValue("@LastTimeSec", timehdnsec.Value);

                DataManager.WriteToDb(cmd);
            }
        }
    }

【问题讨论】:

  • 但随后一切正常?
  • 我在网格视图中使用这些单选按钮。但第一次遇到问题。我检查了所有内容,但不明白问题出在哪里。
  • 请出示您的 rbtn_A_CheckChanged 函数
  • 你是否在checked changed事件上放置了断点并查看它是否触发?
  • 很多可能会影响您的代码。你检查过客户端功能(如果有的话)

标签: c# asp.net asp.net-ajax


【解决方案1】:

默认情况下,您需要在页面加载时将单选按钮 checked 之一设为 true

<asp:RadioButton ID="rbtn_A" runat="server" AutoPostBack="True" GroupName="rbt"
OnCheckedChanged="rbtn_A_CheckedChanged" Checked="True" />

根据你说的试试这个

if(!Page.IsPostback)
{
  rbtn_A.Checked = true;
}

【讨论】:

  • 根据我的功能我不能这样做,因为它与在线考试相关,我需要全部检查为假
  • 如果我第一次选中任何单选按钮,它不会在选中的更改事件上出现断点。但第二次它的工作正常去相关检查
  • 网格视图中的这些单选按钮
  • 它与 rbtn_A 无关。用户可以第一次检查任何单选按钮。 rbtn_A,B,C,D。因为第一次它不会在任何检查的更改事件上出现断点,但第二次工作
  • 感谢您帮助我
【解决方案2】:

我知道这是一篇旧帖子,但希望这对其他人有所帮助。

对我来说,这不是页面上发生的事情,而是我进入页面的方式。

我正在使用Server.Transfer("~/MyPage.aspx"); 导航到该页面。

更改为 Response.Redirect("~/MyPage.aspx"); 解决了我的问题。

【讨论】:

    【解决方案3】:

    将所有单选按钮设置为Checked=False; 可能会对您有所帮助

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>
       <asp:RadioButton ID="rbtn_A" runat="server" GroupName="rbt" 
            AutoPostBack="true" OnCheckedChanged="rbtn_A_CheckedChanged" Checked="False" />
       <asp:RadioButton ID="rbtn_B" runat="server" GroupName="rbt" AutoPostBack="true"
            OnCheckedChanged="rbtn_B_CheckedChanged" Checked="False"/>
       <asp:RadioButton ID="rbtn_C" runat="server" GroupName="rbt" AutoPostBack="true" 
            OnCheckedChanged="rbtn_C_CheckedChanged" Checked="False"/>
       <asp:RadioButton ID="rbtn_D" runat="server" GroupName="rbt" AutoPostBack="true" 
            OnCheckedChanged="rbtn_D_CheckedChanged" Checked="False"/>
     </ContentTemplate>
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2018-10-25
      相关资源
      最近更新 更多