当前位置:编程学习 > C#/ASP.NET >>

求解:“删除失败,具体错误为:未将对象引用设置到对象的实例。”

删除listbox里的内容时报标题的错,请教原因和解决方法。谢谢!积分不多,望见谅^_^

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.IO;

namespace notice
{
/// <summary>
/// customPage 的摘要说明。
/// </summary>
public class customPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button btnDel;
protected System.Web.UI.WebControls.Button btnUpPage;
protected System.Web.UI.WebControls.ListBox lbPage;
protected System.Web.UI.WebControls.Button btnUpFile;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strUpPath = @"C://filestore/";
if (Directory.Exists(strUpPath))
{
BindFile(strUpPath,lbPage);
}
}
#region --> BindPage
private void BindFile(string strUpPath,ListBox lbName)
{
lbName.Items.Clear();
string[] strArrFile = Directory.GetFiles(strUpPath);
for (int i=0; i<strArrFile.Length; i++)
{
string strTemp = strArrFile[i].Replace(strUpPath,"");
ListItem li = new ListItem(strTemp,strArrFile[i]);
lbName.Items.Add(li);
}
}
#endregion

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

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

}
#endregion

private void btnUpPage_Click(object sender, System.EventArgs e)
{
Response.Redirect("UploadPop.aspx");
}

private void btnUpFile_Click(object sender, System.EventArgs e)
{
Response.Redirect("UploadPop.aspx");
}

private void btnDel_Click(object sender, System.EventArgs e)
{
try
{
string strFile = lbPage.SelectedItem.Value;
if (File.Exists(strFile))
File.Delete(strFile);
Response.Write("<script>alert('删除成功 . ');window.navigate(location.href);</script>");
}
catch(Exception err)
{
Response.Write("<p align=center>删除失败,具体错误为:"+err.Message+"</p><p align=center><a href='javascript:history.back()'>返回</a></p>");
Response.End();
}
}
}
}



html文件:
<%@ Page language="c#" Codebehind="customPage.aspx.cs" AutoEventWireup="false" Inherits="notice.customPage" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>customPage</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; WIDTH: 840px; POSITION: absolute; TOP: 8px; HEIGHT: 144px"
cellSpacing="1" cellPadding="1" width="840" border="1">
<TR>
<TD style="HEIGHT: 26px"><FONT face="宋体"></FONT></TD>
</TR>
<TR>
<TD style="HEIGHT: 27px"><FONT face="宋体"></FONT></TD>
</TR>
<TR>
<TD style="HEIGHT: 28px">
<asp:Button id="btnDel" runat="server" Text="删除" CssClass="button" Width="48px"></asp:Button>
<asp:Button id="btnUpPage" runat="server" Text="上传页面" CssClass="button" Width="72px"></asp:Button>
<asp:Button id="btnUpFile" runat="server" Text="上传文件" CssClass="button" Width="72px"></asp:Button></TD>
</TR>
<TR>
<TD style="HEIGHT: 25px"><FONT face="宋体">
<asp:ListBox id="lbPage" runat="server" Width="824px" CssClass="ListBox"></asp:ListBox></FONT></TD>
</TR>
<TR>
<TD></TD>
</TR>
</TABLE>
</form>
</body>
</HTML>
--------------------编程问答-------------------- 菜鸟一个,总遇到些细节问题解决不了~~ --------------------编程问答-------------------- 在这里设置断点:string strFile = lbPage.SelectedItem.Value;

要学会调试 --------------------编程问答-------------------- File.Delete(strFile);
这里要确保文件路径文件名都是正确的 --------------------编程问答-------------------- 某些地方为NULL了。 --------------------编程问答-------------------- string strFile = lbPage.SelectedItem.Value;
if (File.Exists(strFile))
File.Delete(strFile);

可能有两个地方出现错误
1
lbPage没有默认的选择项
2
strFile的值不合法,没有这个文件

--------------------编程问答-------------------- 有没有这个文件?

是否对文件有Read权限? --------------------编程问答-------------------- 你这个 。。  
自己调试下很快就看出来是哪里的毛病了 --------------------编程问答-------------------- catch(Exception err)
{
Response.Write("<p align=center>删除失败,具体错误为:"+err.Message+"</p><p align=center><a href='javascript:history.back()'>返回</a></p>");
Response.End();
}
把这块先注释掉,然后启用调试状态,不添加任何断点,这样可以直接找到未初始化的那一句 --------------------编程问答-------------------- 调试到以下这一行就出现上面的错误了string strFile = lbPage.SelectedItem.Value;
但我明明就已经定义了lbPage --------------------编程问答-------------------- 楼主调试一下,看看哪个变量时Null,然后查找原因就OK了 --------------------编程问答-------------------- 我想问楼主value和text值一样吗?
如果动态赋值那么value可能为空,而lbPage显示的是text的值 --------------------编程问答-------------------- 在string strFile = lbPage.SelectedItem.Value;设置断点,开始调试看看 --------------------编程问答-------------------- 晕死,你知道lbPage.SelectedItem.Value是什么意思吗?
你的lbPage一个值都没有,不为空才怪
你给lbPage赋个值,然后运行选中那个值在删除就行了
我已经测试成功了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,