我只是想将radiobuttonlist的SelectedIndex放到OnSelectedIndexChanged事件的int数组中。我尝试了以下代码但不起作用:
我制作一个这样的数组:
int[] correctAnswers = { -1, -1, -1, -1, -1 }; and i tried this as well:
int[] correctAnswers = new int[100];
//SelectionChangeEvent
protected void rbAnswers_SelectedIndexChanged(object sender, EventArgs e)
{
int j = rbAnswers.SelectedIndex;
correctAnswers.SetValue(j, i); //or correctAnswers[i] = j;
}
我正在.Net中建立一个在线测试系统。我正在改变标签中的问题和RadioButtonList中的答案。值来自数据库。我正在动态更改RadioButtonList,但如果我选择一个答案并单击下一个按钮,然后按下前一个按钮返回我的选择消失。所以我有一个逻辑,就是将选定的索引存储在一个int数组中,然后在下一个和上一个按钮调用索引值并放入RadioButtonList的SelectedIndex中。所以请帮助我,我如何在OnSelectionChange的int数组中取这个选定的值?还有一个补充是我使RadioButtonList的Post Back True。
答案 0 :(得分:1)
如果你动态填充你的控件,我可以收集你的控件,你会想要考虑如何在“用户旅程”中持久保存值。如果在一个页面上计算所有内容,您可以使用ViewState
来保留信息。在Control
内,您可以执行Page
或UserControl
:
/// <summary>
/// Gets or sets the answers to the view state
/// </summary>
private List<int> Answers
{
get
{
// attempt to load the answers from the view state
var viewStateAnswers = ViewState["Answers"];
// if the answers are null, or not a list, create a new list and save to viewstate
if (viewStateAnswers == null || !(viewStateAnswers is List<int>))
{
Answers = new List<int>();
}
// return the answers list
return (List<int>)viewStateAnswers;
}
set
{
// saves a list to the view state
var viewStateAnswers = ViewState["Answers"];
}
}
答案 1 :(得分:0)
我相信你正在实例化每个页面的问题加载/ posctback一个新的数组实例,所有页面变量在Page UnLoad发生后死亡。因此,每次触发按钮单击事件时,您都会收到回发 - 创建页面类的新实例,并且还会实例化所有基础字段。
显然你必须缓存中间结果,对于这样少量的数据(几个项目数组)你可以考虑会话。还要考虑使用泛型List<>
而不是数组,尤其是在存储导致装箱/拆箱的值类型时。
class MyPage: Page
{
private IList<int> correctAnswers;
private readonly string cacheKey = "cachedResults";
protected void Page_Load(object sender, EventARgs args)
{
this.LoadCache();
}
protected void rbAnswers_SelectedIndexChanged(object sender, EventArgs e)
{
if (rbAnswers.SelectedIndex >= 0)
{
// TODO: ensure there are enough allocated items
// so indexer [] would not throw
correctAnswers[rbAnswers.SelectedIndex] = i;
this.SyncCache();
}
}
private LoadCache()
{
var resultsCache = Session[this.cacheKey];
if (resultsCache != null)
{
this.correctAnswers = resultsCache as List<int>;
}
}
private void SyncCache()
{
Session[this.cacheKey] = this.correctAnswers;
}
}