在使用input控件上传文件后button事件出错

suyife 2004-09-24 10:26:16
在一个页面里获得上传的文件的内容后,再按任何一个按钮都会报如下错误:

指定的参数已超出有效值的范围。参数名: 索引超出范围。必须为非负值并小于集合大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: 索引超出范围。必须为非负值并小于集合大小。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。
参数名: 索引超出范围。必须为非负值并小于集合大小。]
System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index) +199
Microsoft.Web.UI.WebControls.BaseChildNodeCollection.System.Web.UI.IStateManager.LoadViewState(Object state)
Microsoft.Web.UI.WebControls.TreeView.LoadViewState(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
System.Web.UI.Page.LoadPageViewState()
System.Web.UI.Page.ProcessRequestMain()

这些按钮都没有实现事件,应该是在发回服务器端的时候viewState发生的错误。
请指点一下解决的方法。谢谢
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
suyife 2004-09-25
  • 打赏
  • 举报
回复
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Text;
using System.IO;

namespace XmlToReportWeb
{
/// <summary>
/// tpData 的摘要说明。
/// </summary>
public class tpData : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button4;
protected System.Web.UI.WebControls.Button Button3;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Panel Panel2;
protected System.Web.UI.HtmlControls.HtmlInputFile fupupload;
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected System.Web.UI.WebControls.Label Label1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
//获得文本内容
int len=(int)fupupload.PostedFile.InputStream.Length;
byte [] b=new byte[len];
fupupload.PostedFile.InputStream.Read(b,0,len);
string txt=Encoding.UTF8.GetString(b);
//Session["DataXml"]=txt;
//根据xml文档获得文档结构树
XmlTextReader reader=new XmlTextReader(new StringReader(txt));
reader.WhitespaceHandling=WhitespaceHandling.None;
try
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an Element.
if(reader.Name=="ReportData")
{
//this.treeView1=new Microsoft.Web.UI.WebControls.TreeView();
this.TreeView1.Nodes.Clear();
this.TreeView1.Nodes.Add(DoReportData(reader));
}
break;
}
}
reader.Close();
}
catch(Exception e1)
{
//Label1.Text=e1.Message;
//Label1.Visible=true;
reader.Close();
}

}

//处理Report节点
private FatherNode DoReportData(XmlTextReader reader)
{
FatherNode tempNode=new FatherNode("RportData");
if(reader.IsEmptyElement!=true)
{
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.EndElement&&reader.Name=="ReportData")
{
return tempNode;
}
if(reader.IsEmptyElement==true&&reader.Name!="Table"&&reader.Name!="View")
continue;
if(reader.NodeType==XmlNodeType.Element&&reader.Name=="Table")
{
TableNode node=DoTable(reader);
tempNode.Nodes.Add (node);
}
if(reader.NodeType==XmlNodeType.Element&&reader.Name=="View")
{
ViewNode node=DoView(reader);
tempNode.Nodes.Add (node);
}
}
}
return tempNode;
}


//处理Table节点
private TableNode DoTable(XmlTextReader reader)
{
string name=reader.GetAttribute("name");
TableNode tempNode=new TableNode(name);

if(reader.IsEmptyElement!=true)
{
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.EndElement&&reader.Name=="Table")
{
return tempNode;
}
if(reader.IsEmptyElement==true&&reader.Name!="Field")
continue;
if(reader.NodeType==XmlNodeType.Element&&reader.Name=="Field")
{
FieldNode node=DoField(reader);
tempNode.Nodes.Add (node);
}
}
}
return tempNode;
}

//处理View节点
private ViewNode DoView(XmlTextReader reader)
{
string name=reader.GetAttribute("name");
ViewNode tempNode=new ViewNode(name);

if(reader.IsEmptyElement!=true)
{
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.EndElement&&reader.Name=="View")
{
return tempNode;
}
if(reader.IsEmptyElement==true&&reader.Name!="Field")
continue;
if(reader.NodeType==XmlNodeType.Element&&reader.Name=="Field")
{
FieldNode node=DoField(reader);
tempNode.Nodes.Add (node);
}
}
}
return tempNode;
}


//处理Field节点
private FieldNode DoField(XmlTextReader reader)
{
string name=reader.GetAttribute("Name");
string type=reader.GetAttribute ("DataType");
string length=reader.GetAttribute ("Length");
FieldNode tempNode=new FieldNode(name);
tempNode.dataType=type;
tempNode.length=length;

if(reader.IsEmptyElement!=true)
{
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.EndElement&&reader.Name=="Field")
{
return tempNode;
}
}
}
return tempNode;
}

}
}




这个页面是根据用户上传的文件来初始化一棵树。其中只对button1的事件进行了处理,但在我初始化树成功后,不管按哪个button都会报上面提到的错误。在web.config里的编码设置是utf-8,上传的xml文件的编码也是utf-8。xml文件也很小,1k都不到。
谢谢。
saucer 2004-09-24
  • 打赏
  • 举报
回复
应该是你的编码的问题,其中的某个参数超出了范围,贴出你的编码
leefire119 2004-09-24
  • 打赏
  • 举报
回复
在webconfig里修改页面 的缓存容量
guoweidong 2004-09-24
  • 打赏
  • 举报
回复
我做了却没像你说的这种情况,关注一下.
simonw 2004-09-24
  • 打赏
  • 举报
回复
上传的文件是不是太大了,aspnet有默认限制的,可以在webcongfig中改

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧