如何将RadioButtonList.SelectedIndex放入Ints数组中
本文关键字:Ints 数组 放入 SelectedIndex RadioButtonList | 更新日期: 2023-09-27 18:29:13
我只想在OnSelectedIndexChanged事件中将radiobuttonlist的SelectedIndex放入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。
如果您正在动态填充控件,根据我所能收集到的信息,您将需要考虑如何在整个"用户旅程"中保持值。如果所有内容都是在一个页面上计算的,则可以使用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"];
}
}
我认为,实例化每个页面的问题是加载/poctback数组的一个新实例,所有页面变量在页面卸载后都会失效。因此,每次触发按钮单击事件时,都会得到一个回发——页面类的一个新实例会被创建,所有底层字段也会被实例化。
显然,您必须缓存中间结果,对于这样少量的数据(数组中的少数项),您可以考虑会话。还要考虑使用泛型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;
}
}