 |
BOOK: Beginning ASP.NET 3.5 : in C# and VB BOOK ISBN: 978-0-470-18759-3
 | This is the forum to discuss the Wrox book Beginning ASP.NET 3.5: In C# and VB by Imar Spaanjaars; ISBN: 9780470187593 |
|
Welcome to the p2p.wrox.com Forums.
You are currently viewing the BOOK: Beginning ASP.NET 3.5 : in C# and VB BOOK ISBN: 978-0-470-18759-3 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
|
|
|
|
|

July 5th, 2009, 04:02 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Chap 13 pg448: Object reference not set to an instance of an object
Hello All,
I get a object reference not set to an instance of an object error after completing the code up to page 448.
The Source Error is produced as follows.
Line 15: {Line 16: PhotoAlbum myPhotoAlbum = (PhotoAlbum)e.Result;Line 17: Response.Redirect(string.Format("ManagePhotoAlbum. aspx?PhotoAlbumId=(0)",Line 18: myPhotoAlbum.id.ToString()));Line 19: What could be wrong? Regards Thomas
|
|

July 5th, 2009, 04:12 AM
|
 |
Wrox Author
|
|
Join Date: Jun 2003
Posts: 17,089
Thanks: 80
Thanked 1,576 Times in 1,552 Posts
|
|
Hi there,
Difficult to say with this tiny bit of code. Looks like e.Result is null but I am not sure.
Can you post more code and describe the steps you're taking? E.g. how do you access this page, whether or not you see the items end up in the database and so on.
Imar
|
|

July 5th, 2009, 04:29 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
object reference not set to instance of an object
HI Imar,
When I open up NewPhotoAlbum.aspx I get a box with two text boxes. The top one is labeled Id and the second one is labeled Name.
I tried entering no data into either box and this genrated the error
Then I tried entering the number 2 into id and then gibberish into the second and this also produced the error.
Below is the code in my pages
newphotoalbum.aspx
<%@PageTitle="Create New Photo Album"Language="C#"MasterPageFile="~/MasterPages/Masterpage.master"AutoEventWireup="true"CodeFile="NewPhotoAlbum.aspx.cs"Inherits="NewPhotoAlbum" %>
<asp:ContentID="Content1"ContentPlaceHolderID="head"Runat="Server">
</asp:Content>
<asp:ContentID="Content2"ContentPlaceHolderID="cpMainContent"Runat="Server">
<asp:DetailsViewID="DetailsView1"runat="server"AutoGenerateRows="False"DataKeyNames="id"DataSourceID="LinqDataSource1"DefaultMode="Insert"Height="50px"Width="125px">
<Fields>
<asp:BoundFieldDataField="id"HeaderText="id"ReadOnly="True"SortExpression="id"/>
<asp:BoundFieldDataField="Name"HeaderText="Name"SortExpression="Name"/>
<asp:CommandFieldShowInsertButton="True"/>
</Fields>
</asp:DetailsView>
<asp:LinqDataSourceID="LinqDataSource1"runat="server"ContextTypeName="PlanetWroxDataContext"EnableInsert="True"oninserted="LinqDataSource1_Inserted"TableName="PhotoAlbums">
</asp:LinqDataSource>
<p>
</p>
</asp:Content>
newphotoalbum.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
publicpartialclassNewPhotoAlbum : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
}
protectedvoid LinqDataSource1_Inserted(object sender, LinqDataSourceStatusEventArgs e)
{
PhotoAlbum myPhotoAlbum = (PhotoAlbum)e.Result;
Response.Redirect(string.Format("ManagePhotoAlbum.aspx?PhotoAlbumId=(0)",
myPhotoAlbum.id.ToString()));
}
}
ManagePhotoAlbum.aspx
<%@PageTitle="Manage Photo Album"Language="C#"MasterPageFile="~/MasterPages/MasterPage.master"AutoEventWireup="true"CodeFile="ManagePhotoAlbum.aspx.cs"Inherits="ManagePhotoAlbum" %>
<asp:ContentID="Content1"ContentPlaceHolderID="head"Runat="Server">
</asp:Content>
<asp:ContentID="Content2"ContentPlaceHolderID="cpMainContent"Runat="Server">
<asp:ListViewID="ListView1"runat="server"DataKeyNames="Id"DataSourceID="LinqDataSource1"InsertItemPosition="LastItem">
<LayoutTemplate>
<ulclass="itemContainer">
<liID="itemPlaceholder"runat="server"/>
</ul>
</LayoutTemplate>
<InsertItemTemplate>
<listyle="">
Description:
<asp:TextBoxID="DescriptionTextBox"runat="server"Text='<%# Bind("Description") %>'/>
<br/>
Tooltip:
<asp:TextBoxID="TooltipTextBox"runat="server"Text='<%# Bind("Tooltip") %>'/>
<br/>
ImageUrl:
<asp:TextBoxID="ImageUrlTextBox"runat="server"Text='<%# Bind("ImageUrl") %>'/>
<br/>
PhotoAlbumId:
<asp:TextBoxID="PhotoAlbumIdTextBox"runat="server"Text='<%# Bind("PhotoAlbumId") %>'/>
<br/>
PhotoAlbum:
<asp:TextBoxID="PhotoAlbumTextBox"runat="server"Text='<%# Bind("PhotoAlbum") %>'/>
<br/>
<asp:ButtonID="InsertButton"runat="server"CommandName="Insert"Text="Insert"/>
<asp:ButtonID="CancelButton"runat="server"CommandName="Cancel"Text="Clear"/>
</li>
</InsertItemTemplate>
<ItemTemplate>
<listyle="">
Description:
<asp:LabelID="DescriptionLabel"runat="server"Text='<%# Eval("Description") %>'/>
<br/>
Tooltip:
<asp:LabelID="TooltipLabel"runat="server"Text='<%# Eval("Tooltip") %>'/>
<br/>
ImageUrl:
<asp:LabelID="ImageUrlLabel"runat="server"Text='<%# Eval("ImageUrl") %>'/>
<br/>
<asp:ButtonID="DeleteButton"runat="server"CommandName="Delete"Text="Delete"/>
</li>
</ItemTemplate>
</asp:ListView>
<asp:LinqDataSourceID="LinqDataSource1"runat="server"ContextTypeName="PlanetWroxDataContext"EnableDelete="True"EnableInsert="True"TableName="Pictures"Where="PhotoAlbumId == @PhotoAlbumId"oninserting="LinqDataSource1_Inserting">
<WhereParameters>
<asp:QueryStringParameterDefaultValue="-1"Name="PhotoAlbumId"QueryStringField="PhotoAlbumId"Type="Int32"/>
</WhereParameters>
</asp:LinqDataSource>
</asp:Content>
managephotoalbum.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
publicpartialclassManagePhotoAlbum : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
}
protectedvoid LinqDataSource1_Inserting(object sender, LinqDataSourceInsertEventArgs e)
{
Picture myPicture = (Picture)e.NewObject;
myPicture.PhotoAlbumId = Convert.ToInt32(Request.QueryString.Get("PhotoAlbumId"));
}
}
Hope this helps
Regards
Thomas
|
|

July 5th, 2009, 04:41 AM
|
 |
Wrox Author
|
|
Join Date: Jun 2003
Posts: 17,089
Thanks: 80
Thanked 1,576 Times in 1,552 Posts
|
|
Hi there,
A couple of things:
1. Please use the "Remove Text Formatting" button on the toolbar of the editor when posting here. Then wrap the text in code tags by using the code button. Otherwise, the code gets impossible to read.
2. Please provide more information. Like I said in my previous message, I need to know things like whether or not the items shows up in the database or not. Because of a bug in this forum I cannot use your code as-is (or at all, in fact), so it's difficult for me to reproduce the problem without more background information.
Then make sure you did the following:
1. Make Id a primary key in step 1
2. Enable inserting on the data source in step 6
3. Enable inserting on the FormView in step 7
4. Set the default mode to Insert.
If you confirmed all this and it still doesn't work, take a copy of this page from the download that comes with this book. Does it work then?
I also notice you have a proeprty called id. Is that correct? The table column was initially called Id with a capital I.
Finally, you seem to be missing an InsertVisible="False" on the Id column in the FormView. You should hide that control as it's auto generated by the database (maybe you did make it a primary but not an identity?)
Cheers,
Imar
|
|

July 5th, 2009, 06:01 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
object reference not set to instance of an object
Imar,
I did everything that you suggested including copying and pasting the code and I still get the same problem.
The only thing that I saw that in the database explorer the picture table as you correctly identified was "id" not "Id".
So I changed it to Id after I copied and pasted the source code.
When I first wrote to you I included a small piece of code which is as follows
PhotoAlbum myPhotoAlbum = (PhotoAlbum)e.Result;
Line 17: Response.Redirect(string.Format("ManagePhotoAlbum. aspx?PhotoAlbumId=(0)",
Line 18: myPhotoAlbum.id.ToString()));
The name of the file ManagephotoAlbum is spelt correctly so I am wondering
what the significance of the PhotoAlbumId=(0)",
code is? I cannot see a PhotoAlbumId variable in the database. What does =(0) mean?
I hope this is of help
Thanks
Thomas
Line 19: }
|
|

July 5th, 2009, 06:07 AM
|
 |
Wrox Author
|
|
Join Date: Jun 2003
Posts: 17,089
Thanks: 80
Thanked 1,576 Times in 1,552 Posts
|
|
The {0} is used in the string.Format call. Consider this:
Code:
string.Format("ManagePhotoAlbum.aspx?PhotoAlbumId=(0)", myPhotoAlbum.id.ToString())
This creates a string with a redirect URL based on the ID of the new photoalbum. So, if you insert a record in the database (you still haven't confirmed whether the record shows up in the database or not) its new ID is taken and appended to the redirect string. String.Format nicely puts the ID at the place of the {0} placeholder. So, when your new Album has an ID of 34, you're redirected to:
ManagePhotoAlbum.aspx?PhotoAlbumId=34
After you changed your database schema (column names etc) did you also regenerate the Linq to SQL diagram? And is your ID column a primary key AND an identity?
Imar
|
|

July 5th, 2009, 06:09 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Correction
photoAlbumId is a variable in the Picture database.
|
|

July 5th, 2009, 06:11 AM
|
 |
Wrox Author
|
|
Join Date: Jun 2003
Posts: 17,089
Thanks: 80
Thanked 1,576 Times in 1,552 Posts
|
|
Quote:
Correction
photoAlbumId is a variable in the Picture database
|
Heuh? I don't understand what you mean by that....
Imar
|
|

July 5th, 2009, 06:23 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Imar,
Don't worry about that last comment.
I have made the Id column in the PhotoAlbum database an identity column by clicking properties and inserting the value "Id" next to the Identity Column cell in the properties window.
Still same problem.
BTW after cutting and pasting the code from the book I no longer have the Id text box in NewPhotoAlbum.aspx
Cheers Tome
|
|

July 5th, 2009, 06:29 AM
|
|
Authorized User
|
|
Join Date: Apr 2009
Posts: 54
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Imar,
I have just opened the website from the sample code that comes with the book and that works fine. Remember before that you asked be to copy and paste the code and it still didn't work well running it without copying and pasting seems to work.
I hope this helps localise the issue.
Regards
Thomas
|
|
 |