Avatar billede frulilla Nybegynder
15. oktober 2011 - 14:44 Der er 9 kommentarer og
1 løsning

Objekt referencen er ikke indstillet til en forekomst af et objekt

Jeg har lavet en billed upload i Visual Studio 2010. Når jeg vil uploade billedet, kommer den med en fejl.
<i>Objekt referencen er ikke indstillet til en forekomst af et objekt</i>
Jeg er ikke god nok endnu til at kunne forstå hvad der er galt. Er der nogen der vil forklare mig det, så jeg kan få det til at virke?

-------------------------------------------------
<b>Album.aspx:<b>
--------------------
<%@ Page Title="" Language="C#" MasterPageFile="~/Admin/Admin.Master" AutoEventWireup="true"
    CodeBehind="Album.aspx.cs" Inherits="Viking.Admin.Images" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:Label ID="AlbumNameLabel" runat="server" Text="Giv dit album et navn:" Font-Bold="True"></asp:Label>
    <br />
    <asp:TextBox ID="AlbumNameTextbox" runat="server">
    </asp:TextBox>

    <asp:Label ID="AlbumImgLabel" runat="server" Text="Upload et billede:"
        Font-Bold="True"></asp:Label>
    <br />
    <br /> <asp:FileUpload ID="FileUpload1" runat="server" />

    <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="Upload" />
    <br />
</asp:Content>

----------------------------------------------------
<b>Album.aspx.cs:<b>
--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using Viking.Code.Core.Models;

namespace Viking.Admin
{
    public partial class Images : System.Web.UI.Page
    {


        protected void Page_Load(object sender, EventArgs e)
        {
            string albumName = Request.QueryString["name"];
            Code.Core.Models.Album album = ModelFactory.GetAlbumByName(albumName);

            if (album != null)
            {
                Session["Album"] = album;
            }
        }

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            Code.Core.Models.Album album = (Code.Core.Models.Album)Session["Album"];

           
            if (FileUpload1.HasFile)
            {
                string fileName = FileUpload1.FileName;
                string pathName = Path.Combine(Server.MapPath("~/Images/Img/"), fileName);
                if (AlbumNameTextbox != null)
                {
                    album.AddImageUrl("~/Images/Img/" + fileName);
                }
                album.Save();
                FileUpload1.SaveAs(pathName);
            }
        }
    }
}
Avatar billede Slettet bruger
15. oktober 2011 - 18:01 #1
Viser den ikke et stacktrace så du kan se hvor i koden den fejler?
Det kunne lyde som en nullpointer et eller andet sted.
Avatar billede heinzdmx Nybegynder
15. oktober 2011 - 18:06 #2
En reference til en af dine objekter er null.

Du tjekker fint i din load imod det:

if (album != null)
            {
                Session["Album"] = album;
            }{/div]

Men hvad så i din upload

[div]Code.Core.Models.Album album = (Code.Core.Models.Album)Session["Album"];

           
            if (FileUpload1.HasFile)
            {
                string fileName = FileUpload1.FileName;
                string pathName = Path.Combine(Server.MapPath("~/Images/Img/"), fileName);
                if (AlbumNameTextbox != null)
                {
                    album.AddImageUrl("~/Images/Img/" + fileName);
                }
                album.Save();
                FileUpload1.SaveAs(pathName);
            }


Hvis din session er lig nul, så kan scriptet ikke gøre det den skal og fejler. Hvordan den kan være nul, er jo så noget der er lidt svært at se ud fra den kode du har vist.

og hvorfor tjekker du om AlbumNameTextbox == null? Eftersom du har sat den ind bliver den vel næppe nul? Indholdet kan godt være tomt (== "")


Ps. er dit system kun en til (admin?) eller til flere?
Hvis det er til flere, har du gjort det muligt at uploade til andres album også, i er med man skal sende album navnet afsted
Avatar billede frulilla Nybegynder
15. oktober 2011 - 21:28 #3
Nej nej der er kun en admin på siden, så det er ikke noget problem. Det er min man der skal bruge siden, og ingen andre skal uploade billeder der.
Hvilken anden kode skal jeg komme med, for at du kan se det?

Den viser at fejlen skulle være i denne linje

album.AddImageUrl("~/Images/Img/" + fileName);
Avatar billede frulilla Nybegynder
15. oktober 2011 - 21:48 #4
PS: Textbox tjekket var et forsøg på at finde fejlen. Men kan godt se nu den var dum.
Avatar billede heinzdmx Nybegynder
16. oktober 2011 - 02:18 #5
Det vil sige at album er = null.

Nu skal du så bare finde ud af hvorfor den er det.

Jeg vil tro at det er:

ModelFactory.GetAlbumByName(albumName)

Der returnere null eller også bliver din session bare ikke sat
Avatar billede frulilla Nybegynder
16. oktober 2011 - 11:19 #6
ModelFactory ser sådan ud:

public static Album GetAlbumByName(string albumName)
        {
            SessionFactory sessionFactory = SessionFactory.GetInstance();
            var album = sessionFactory.GetSession().CreateCriteria<Album>()
                .Add(Restrictions.Eq("Name", albumName)).UniqueResult<Album>();
            sessionFactory.CloseSession();
            return album; 
        }

Ellers er jeg vist ikke helt med på hvad du mener jeg skal gøre.
Jeg er ikke nogen ørn til det her, men skal ha det lært ordentligt :)
Avatar billede frulilla Nybegynder
16. oktober 2011 - 11:45 #7
Du kan også lige få den her fil:





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Viking.Code.Core.Models
{
    public class Album : CoreModel
    {
     
        public virtual int Id { get; private set; }
   
        public virtual string Name { get; set; }
       
        public virtual IList<string> ImgUrls { get; set; }
        public virtual bool ShowInMainMenu { get; set; }
        public virtual Album Parent { get; set; }
        public virtual IList<Album> Children { get; set; }
   
       
        public Album()
        {
        }

       
        public Album(string name, string fileName, bool b)
        {
            Name = name;
           

            ImgUrls = new List<string>();
           
        }

        public virtual void AddImageUrl(string url)
        {
            ImgUrls.Add(url);
        }
        public virtual void RemoveImageUrl(string url)
        {
            ImgUrls.Remove(url);
        }
        public virtual void AddAsChildToParent(Album parent)
        {
            Parent = parent;
            parent.Children.Add(this);
        }
    }
}
Avatar billede frulilla Nybegynder
30. oktober 2011 - 00:23 #8
Jeg har lavet det hele om igen, og nu virker det fint. Er der nogen der vil ha point? Så smid lige et svar.
Avatar billede heinzdmx Nybegynder
30. oktober 2011 - 02:02 #9
Svar
Avatar billede heinzdmx Nybegynder
30. oktober 2011 - 02:23 #10
Svar her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester