我开发了一个公式,如果需要,可以由客户编辑。在我的本地应用程序中,当我想要更新表单时,一切都正常运行,但,一旦我尝试更新网站上的公式,就会引发错误。这是错误所在的代码。
objectCollection = db.SelectFragebogen(sid, cbControls, tbControls);
objectCollection.RemoveAt(0);
try
{
for (int i = 0; i < (cbControls.Count + tbControls.Count); i++)
{
if (i < cbControls.Count)
{
if ((bool)objectCollection.ElementAt(i) != cbControls.ElementAt(i).Checked) { cbUpdate.Add(cbControls.ElementAt(i)); }
}
else
{
if ((string)objectCollection.ElementAt(i) != tbControls.ElementAt(i - cbControls.Count).Text) { tbUpdate.Add(tbControls.ElementAt(i - cbControls.Count)); }
}
}
db.UpdateFragebogen(sid, cbUpdate, tbUpdate);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message.ToString());
Response.Redirect("EmptySite.aspx");
}
db.SelectFragebogen正在从数据库中选择整个公式。 RemoveAt只删除表单的ID。 cbControls是Checkbox-Elements列表,tbControls是Textbox-Elements列表。他们正在填补,我查了一下。
所以现在我们有了objectCollection,其中保存了“旧”值,以及2个控件列表,其中“new”值是。 for循环现在将比较旧值和新值,并将更改写入额外的集合(cbUpdate和tbUpdate),因为我不知何故需要知道更新的内容。
正如我所说的,如果我在我的本地应用程序中运行它一切都很好,并且它没有任何问题。一旦我尝试更新我的网站上的表单,就会抛出错误。
错误是“索引超出范围” - 错误。
答案 0 :(得分:1)
调试try块并查看抛出IndexOutOfRange异常的行,并检查i的值。它可能就像改变
一样简单(cbControls.Count + tbControls.Count) - 1
到
IValidatableObject
<标题中的。