自动回发首次在ASP.NET中不起作用
本文关键字:ASP NET 不起作用 | 更新日期: 2023-09-27 18:01:00
我在更新面板中使用了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);
}
}
}
默认情况下,页面加载时需要使其中一个单选按钮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;
}
我知道这是一篇旧帖子,但希望这能帮助其他人。
对我来说,这不是页面上发生的事情,而是我进入页面的方式。
我使用Server.Transfer("~/MyPage.aspx");
导航到页面。
更改为Response.Redirect("~/MyPage.aspx");
解决了我的问题。
将所有单选按钮设置为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>