未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 19: if (!Page.IsPostBack)
行 20: {
行 21: string detailid = Request.QueryString["detailid"].ToString();
行 22: dList.DataSource = new booksDetailsBLL().SelectDetailid(detailid);
行 23: dList.DataBind();
源文件: d:\TwoNetBooks\BookDetails.aspx.cs 行: 21 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
BookDetails.Page_Load(Object sender, EventArgs e) in d:\TwoNetBooks\BookDetails.aspx.cs:21
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 --------------------------------------------------<div id="kuanjia">
<asp:DataList ID="dList" runat="server">
<ItemTemplate>
<h3>标题</h3>
<p class="pimagers">
<asp:Image ID="Image1" runat="server"
ImageUrl='<%#"~/imager/"+ Eval("bookpicture") %>'
/>
</p>
<p>
<asp:Label ID="Label1" runat="server" Text="作者:"></asp:Label>
<asp:Label ID="Label9" runat="server" Text='<%# Eval("bookwiter") %>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text="出版日期:"></asp:Label>
<asp:Label ID="Label10" runat="server" Text='<%# Eval("addtime") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label3" runat="server" Text="出版社:"></asp:Label>
<asp:Label ID="Label11" runat="server" Text='<%# Eval("bookconren") %>'></asp:Label>
<asp:Label ID="Label4" runat="server" Text="市场价:"></asp:Label>
<asp:Label ID="Label12" runat="server" Text='<%# Eval("etprice") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label5" runat="server" Text="ISBN :"></asp:Label>
<asp:Label ID="Label13" runat="server" Text='<%# Eval("isbn") %>'></asp:Label>
<asp:Label ID="Label6" runat="server" Text="会员价:"></asp:Label>
<asp:Label ID="Label14" runat="server" Text='<%# Eval("menberprice") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label7" runat="server" Text="单击次数 :"></asp:Label>
<asp:Label ID="Label8" runat="server" Text="折扣及:"></asp:Label>
<asp:Label ID="Label15" runat="server" Text='<%# Eval("rebate") %>'></asp:Label>
<asp:ImageButton ID="ImageButton1" runat="server" />
</p>
<div id="jiejie">
<h3>详细介绍</h3>
<p>
<asp:Label ID="Label16" runat="server" Text='<%# Eval("boointorudce") %>'></asp:Label>
</p>
</div>
</ItemTemplate>
</asp:DataList>
</div>
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 19: if (!Page.IsPostBack)
行 20: {
行 21: string detailid = Request.QueryString["detailid"].ToString();
行 22: dList.DataSource = new booksDetailsBLL().SelectDetailid(detailid);
行 23: dList.DataBind();
源文件: d:\TwoNetBooks\BookDetails.aspx.cs 行: 21 堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
BookDetails.Page_Load(Object sender, EventArgs e) in d:\TwoNetBooks\BookDetails.aspx.cs:21
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436 --------------------------------------------------<div id="kuanjia">
<asp:DataList ID="dList" runat="server">
<ItemTemplate>
<h3>标题</h3>
<p class="pimagers">
<asp:Image ID="Image1" runat="server"
ImageUrl='<%#"~/imager/"+ Eval("bookpicture") %>'
/>
</p>
<p>
<asp:Label ID="Label1" runat="server" Text="作者:"></asp:Label>
<asp:Label ID="Label9" runat="server" Text='<%# Eval("bookwiter") %>'></asp:Label>
<asp:Label ID="Label2" runat="server" Text="出版日期:"></asp:Label>
<asp:Label ID="Label10" runat="server" Text='<%# Eval("addtime") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label3" runat="server" Text="出版社:"></asp:Label>
<asp:Label ID="Label11" runat="server" Text='<%# Eval("bookconren") %>'></asp:Label>
<asp:Label ID="Label4" runat="server" Text="市场价:"></asp:Label>
<asp:Label ID="Label12" runat="server" Text='<%# Eval("etprice") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label5" runat="server" Text="ISBN :"></asp:Label>
<asp:Label ID="Label13" runat="server" Text='<%# Eval("isbn") %>'></asp:Label>
<asp:Label ID="Label6" runat="server" Text="会员价:"></asp:Label>
<asp:Label ID="Label14" runat="server" Text='<%# Eval("menberprice") %>'></asp:Label>
</p>
<p>
<asp:Label ID="Label7" runat="server" Text="单击次数 :"></asp:Label>
<asp:Label ID="Label8" runat="server" Text="折扣及:"></asp:Label>
<asp:Label ID="Label15" runat="server" Text='<%# Eval("rebate") %>'></asp:Label>
<asp:ImageButton ID="ImageButton1" runat="server" />
</p>
<div id="jiejie">
<h3>详细介绍</h3>
<p>
<asp:Label ID="Label16" runat="server" Text='<%# Eval("boointorudce") %>'></asp:Label>
</p>
</div>
</ItemTemplate>
</asp:DataList>
</div>
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433
有没有取道值?
<a href='BookDetails.aspx?detailid=<%#Eval("detailid") %>'><%# Eval("bookname") %></a>
detailid 可能为null
#region 根据detailid找到相应的
/// <summary>
/// 根据detailid找到相应的
/// </summary>
/// <param name="detailid"></param>
/// <returns></returns>
public DataTable SelectDetailid(string detailid)
{
DataTable dt = new DataTable();
string sql = "booksDetails_selectdetailid";
SqlParameter[] para=new SqlParameter[]{
new SqlParameter("@detailid",detailid)
};
dt = hepler.ExecuteQuery(sql,para,CommandType.StoredProcedure);
return dt;
}
#endregion
------
BLL层的代码
#region 根据detailid找到相应的
/// <summary>
/// 根据detailid找到相应的
/// </summary>
/// <param name="detailid"></param>
/// <returns></returns>
public DataTable SelectDetailid(string detailid)
{
return bs.SelectDetailid(detailid);
}
#endregion
{
string detailid = Request.QueryString["detailid"].ToString();
dList.DataSource = new booksDetailsBLL().SelectDetailid(detailid);
dList.DataBind();
只要仔细想想,就是明白了.
!Page.IsPostBack的意思是,网页一次浏览时.执行的.
那当网页第一次执行时,就是用户根本还没有操作的可能,Request.QueryString["detailid"].ToString(); 这个肯定是一个null值.
那当一个null值传入new booksDetailsBLL().SelectDetailid(detailid); 去执行,那肯定会出现:
未将对象引用设置到对象的实例
if (Request.QueryString["detailid"]!=null){
行 21: string detailid = Request.QueryString["detailid"].ToString();
行 22: dList.DataSource = new booksDetailsBLL().SelectDetailid(detailid);
行 23: dList.DataBind();
}
另外,Request.QueryString["detailid"] 不需要ToString():
行 21: string detailid = Request.QueryString["detailid"].ToString();
写成这样就行:
行 21: string detailid = Request.QueryString["detailid"];