在c#asp.net中,如何在视图状态下的不同回发之间保存值?
我陷入了一个问题,我正在创建一个100个问题的在线测试。每个问题都有四个单选按钮(选项)。我想知道,当我选择选项时,如何使浏览器在按下提交按钮时记住每个问题的选定值。我想在提交按钮上获取值?我使用两个属性,即“CurrentPageNo”和“IncrementCount”,使用viewstate设置/获取其值。 这是我的密码:在c#asp.net中,如何在视图状态下的不同回发之间保存值?,c#,asp.net,.net,C#,Asp.net,.net,我陷入了一个问题,我正在创建一个100个问题的在线测试。每个问题都有四个单选按钮(选项)。我想知道,当我选择选项时,如何使浏览器在按下提交按钮时记住每个问题的选定值。我想在提交按钮上获取值?我使用两个属性,即“CurrentPageNo”和“IncrementCount”,使用viewstate设置/获取其值。 这是我的密码: public void NavigateRecords() { //CurrentPageNo = 1; PagedDataSource pds = ne
public void NavigateRecords()
{
//CurrentPageNo = 1;
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dt.DefaultView;
pds.AllowPaging = true;
pds.PageSize = 1;
// Set the PagedDataSource's current page
pds.CurrentPageIndex = CurrentPageNo;
lblCurrentPage.Text = "Page No: " + (CurrentPageNo + 1).ToString() +
" of "
+ pds.PageCount.ToString();
btnPrev.Enabled = !pds.IsFirstPage;
btnNext.Enabled = !pds.IsLastPage;
btnFirst.Enabled = !pds.IsFirstPage;
btnLast.Enabled = !pds.IsLastPage;
btnSubmit.Visible = pds.IsLastPage;
repeaterItems.DataSource = pds;
repeaterItems.DataBind();
SelectedValue = rblOptions.SelectedValue;
Dictionary<string, string> values = new Dictionary<string, string>();
for (int j = 3; j < 7; j++)
{
values.Add(dt.Rows[IncrementCount][j].ToString(), dt.Columns[j].ToString());
}
//var options = repeaterItemsFindControl("rblOptions") as RadioButtonList;
//options = new RadioButtonList();
rblOptions.DataSource = values;
rblOptions.DataTextField = "Key";
rblOptions.DataValueField = "Value";
rblOptions.DataBind();
lblMsg.Text = rblOptions.SelectedValue;
}
public void导航记录()
{
//CurrentPageNo=1;
PagedDataSource pds=新的PagedDataSource();
pds.DataSource=dt.DefaultView;
pds.allowpage=true;
pds.PageSize=1;
//设置页面数据源的当前页面
pds.CurrentPageIndex=CurrentPageNo;
lblCurrentPage.Text=“页码:”+(CurrentPageNo+1).ToString()+
“的”
+pds.PageCount.ToString();
btnPrev.Enabled=!pds.IsFirstPage;
btnNext.Enabled=!pds.IsLastPage;
btnFirst.Enabled=!pds.IsFirstPage;
btnLast.Enabled=!pds.IsLastPage;
btnSubmit.Visible=pds.IsLastPage;
repeaterItems.DataSource=pds;
repeaterItems.DataBind();
SelectedValue=rblOptions.SelectedValue;
字典值=新字典();
对于(int j=3;j<7;j++)
{
Add(dt.Rows[IncrementCount][j].ToString(),dt.Columns[j].ToString());
}
//var选项=作为RadioButtonList的repeaterItemsFindControl(“rblOptions”);
//选项=新建RadioButtonList();
rblOptions.DataSource=值;
rblOptions.DataTextField=“Key”;
rblOptions.DataValueField=“Value”;
rblOptions.DataBind();
lblMsg.Text=rblOptions.SelectedValue;
}
您需要创建一个会话来存储您的答案。因此,创建一个列表
或类以放入该会话。
然后在页面加载时检查会话是否存在。如果它确实将会话强制转换为其原始类型
List<string> Questions;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["questions"] != null)
{
Questions = Session["questions"] as List<string>;
}
else
{
Questions = new List<string>();
Session["questions"] = Questions;
}
}
如果您继续按
按钮1
,您将看到答案数量增加。您需要创建一个会话来存储您的答案。因此,创建一个列表
或类以放入该会话。
然后在页面加载时检查会话是否存在。如果它确实将会话强制转换为其原始类型
List<string> Questions;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["questions"] != null)
{
Questions = Session["questions"] as List<string>;
}
else
{
Questions = new List<string>();
Session["questions"] = Questions;
}
}
如果您继续按
按钮1
,您将看到答案数量增加。使用两个浏览器。一个用于主页,当按下按钮时打开第二个。第一页将包含按下的按钮。您真的需要它们吗?不能将它们存储在会话中吗?不管怎样(viewstate或sessoin),我需要在按下submit按钮时选择所有问题的值。我认为默认情况下,所有Asp.net控件都有viewstate,并且回发时不会丢失数据。请使用两个浏览器。一个用于主页,当按下按钮时打开第二个。第一页将包含按下的按钮。您真的需要它们吗?不能将它们存储在会话中吗?无论如何(viewstate或sessoin)我是否需要按submit按钮时所有问题的选定值我认为默认情况下,所有Asp.net控件都具有viewstate,并且在回发时不会丢失数据?解释会话将其值保存在何处(服务器内存)以及网站是否水平缩放也很有用,它不能保证相同的请求通过相同的服务器,这将使页面之间的所有数据丢失。。。也许可以让他指向Memcache/Redis,或者让事情简单一些:一个带有json的cookie,带有id
,还有answer
:)谢谢。但是保留单选按钮列表的值呢。我正在使用问题。在单选按钮列表的onselectedIndexchanged方法中添加(rblOptions.SelectedValue),但在按下submit按钮时,它会给我上次尝试的问题的选定值为什么?@WaqasQureshi,这取决于您如何将数据设置到RadioButtonList。你是不是在网上购物支票上这么做的?这救了我的命数小时的文字工作。解释会话将其值保存在何处(服务器内存)也很有用,如果网站水平扩展,则不能保证相同的请求通过相同的服务器,这将使页面之间的所有数据丢失。。。也许可以让他指向Memcache/Redis,或者让事情简单一些:一个带有json的cookie,带有id
,还有answer
:)谢谢。但是保留单选按钮列表的值呢。我正在使用问题。在单选按钮列表的onselectedIndexchanged方法中添加(rblOptions.SelectedValue),但在按下submit按钮时,它会给我上次尝试的问题的选定值为什么?@WaqasQureshi,这取决于您如何将数据设置到RadioButtonList。你是不是在网上购物支票上这么做的?这救了我的命一小时又一小时的文字劳动。