Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:23 Der er 17 kommentarer

Hvordan løser jeg System.StackOverflowException?

Får denne type fejl når jeg loader min side:

Server Error in '/rasmus/liste' Application.
--------------------------------------------------------------------------------

Exception of type System.StackOverflowException was thrown.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.StackOverflowException: Exception of type System.StackOverflowException was thrown.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:


[StackOverflowException: Exception of type System.StackOverflowException was thrown.]

----------------------------------------------------------------

Fejlen har jeg som sådan fundet ud af. Det er "start" og "slut", der kører i ring... Hvordan løser jeg dette? Ved ikke om det er oplysninger nok... thx

//
public int start
        {
            get
            {
                int dummy = slut;
                return (_page_length * (_page-1))+1;
            }
        }
        public int slut
        {
            get
            {    int _slut = start + _page_length -1;
                if( _slut > _total_length ) _slut = _total_length;
                if( _slut == _total_length ) page = (int)Math.Ceiling((double)_total_length / (double)_page_length);
                return _slut;
            }
        }
//
Avatar billede arne_v Ekspert
25. maj 2005 - 10:25 #1
prøv:

public int start
        {
            get
            {
                int dummy = _slut; // <----------
                return (_page_length * (_page-1))+1;
            }
        }
Avatar billede arne_v Ekspert
25. maj 2005 - 10:26 #2
og for en god ordens skyld:

public int slut
        {
            get
            {    int _slut = _start + _page_length -1; // <--------
                if( _slut > _total_length ) _slut = _total_length;
                if( _slut == _total_length ) page = (int)Math.Ceiling((double)_total_length / (double)_page_length);
                return _slut;
            }
        }
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:27 #3
Virker desværre ikke...
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:35 #4
Her er lige default.aspx.cs filen:

//
using System;
using System.Configuration;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
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;

namespace liste
{
    /// <summary>
    /// Summary description for _default.
    /// </summary>
    public class _default : System.Web.UI.Page
    {
        override protected void OnInit(EventArgs e)
        {
            int rows_affected = 0;
            dk.madsb.data.db odb = new dk.madsb.data.db("sql_connection_string");
            odb.create_cmd();
            System.Xml.XmlDocument xmldoc = odb.get_xml("sp_rasmus_liste_get","root","raekke", ref rows_affected);
            odb = null;

            string page_length = Request.QueryString["page_length"];
            if( page_length == null ) page_length = "5";

            string page = Request.QueryString["page"];
            if( page == null ) page = "1";

            int i_page = int.Parse(page);
            int i_page_length = int.Parse(page_length);

            handy_objekter.liste test_liste = new handy_objekter.liste(rows_affected, i_page_length, i_page);
           
            dk.madsb.ui.xrender render = new dk.madsb.ui.xrender();

            render.xsl_object_list.AddParam("param1", "", test_liste.gi_mig_params().CreateNavigator().Select("/"));
            render.document = xmldoc;
            render.transform_path = Server.MapPath("liste.xslt");
            Response.Write(render.render());

        }
    }
}
//
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:36 #5
Og så hele liste.cs fil for god ordens skyld:

//
using System;
using System.Xml;

namespace handy_objekter
{
    /// <summary>
    /// Summary description for liste.
    /// </summary>
    public class liste
    {   
        private int _total_length = 0;
        private int _page_length = 0;
        private int _page = 0;

        public liste(int total_length, int page_length, int page)
        {
            _total_length = total_length;
            _page_length = page_length;
            _page = page;
        }

        public int start
        {
            get
            {
                int dummy = slut; // <----------
                return (_page_length * (_page-1))+1;
            }
        }
        public int slut
        {
            get
            {
                    int _slut = start + _page_length -1; // <--------
                if( _slut > _total_length ) _slut = _total_length;
                if( _slut == _total_length ) page = (int)Math.Ceiling((double)_total_length / (double)_page_length);
                return _slut;
            }
        }
        //
        public int total_length
        {
            get{ return _total_length; }
            set{ _total_length = value; }
        }
        public int page_length
        {
            get{ return _page_length; }
            set{ _page_length = value; }
        }
        public int page
        {
            get{ return _page; }
            set{ _page = value; }
        }
        public XmlDocument gi_mig_params()
        {
            //
            XmlDocument xml_params = new XmlDocument();
            xml_params.LoadXml("<root/>");

            XmlElement xele = xml_params.CreateElement("count");
            xele.InnerText = this._total_length.ToString();
            xml_params.DocumentElement.AppendChild( xele );

            xele = xml_params.CreateElement("page");
            xele.InnerText = this.page.ToString();
            xml_params.DocumentElement.AppendChild( xele );

            xele = xml_params.CreateElement("start");
            xele.InnerText = this.start.ToString();
            xml_params.DocumentElement.AppendChild( xele );                               

            xele = xml_params.CreateElement("slut");
            xele.InnerText = this.slut.ToString();
            xml_params.DocumentElement.AppendChild( xele );

            xele = xml_params.CreateElement("show_pr_site");
            xele.InnerText = this._page_length.ToString();
            xml_params.DocumentElement.AppendChild( xele );

            return xml_params;
        }
    }
}
//
Avatar billede arne_v Ekspert
25. maj 2005 - 10:39 #6
du fik ikke sat den underscore in i den her linie

int _slut = start + _page_length -1; // <--------
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:46 #7
Lige lidt hjalp det desværre.. _slut og _start eksistere jo ikke i klassen!
Avatar billede arne_v Ekspert
25. maj 2005 - 10:49 #8
hvis start property kalder slut property og slut proerty kalder start property
så skal du have en stackoverflow
Avatar billede arne_v Ekspert
25. maj 2005 - 10:50 #9
og jeg formodede da at der var nogle fields bagved de properties - det plejer der
at være

men hvis ikke skal du nok have de properties lavet om til methods og så have
justeret logikken lidt
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 10:53 #10
Det lige netop det der er problemet at start property kalder slut property og omvendt..

have en stackoverflow? sorry jeg er stadig en noob i c# :)
Avatar billede arne_v Ekspert
25. maj 2005 - 10:57 #11
det er noget som sker når du får lavet en uendelig kalde løkke
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 11:06 #12
Ok troede bare at der kunne laves et par små-ændringer i koden (i liste.cs), så den stackoverflowede...?

så må jeg jo prøve at lave logikken lidt om.
Avatar billede rasmus_damberg Nybegynder
25. maj 2005 - 11:07 #13
så den IKKE stackoverflowede selvfølgelig...
Avatar billede arne_v Ekspert
25. maj 2005 - 11:09 #14
jeg ved ikke hvor store elle små ændringerne skal være

men start slut logikken skal redesignes
Avatar billede rasmus_damberg Nybegynder
26. maj 2005 - 14:17 #15
Ok, evt. nogle løsningsforslag så?
Avatar billede arne_v Ekspert
26. maj 2005 - 14:31 #16
nej

jeg ved jo ikke hvordan du vil have din paging til at virke
Avatar billede rasmus_damberg Nybegynder
26. maj 2005 - 14:59 #17
------------------------------------------------------------

Liste testen...
Hjem | Viser 1-5 af 50 [dropdown her m. 5,10,15,20] | Tilbage - Frem » | Du er nu på side 1

detteherertekstnummer1
detteherertekstnummer2
detteherertekstnummer3
detteherertekstnummer4
detteherertekstnummer5

------------------------------------------------------------

Meningen med denne opgave er, at jeg har en database (liste), som jeg skal kunne trække ud, på forskellige måder i dette dokument. Jeg vil have mulighed for at vælge 5, 10, 15 el. 20 visninger af gangen fra databasen. Problemet er når jeg fjerner denne linie:

//int dummy = slut;

Hvis jeg fx vælger at vise 5 af gangen og bladre frem til side 10(/liste/default.aspx?page=10&page_length=5), og så vil have 20 visninger af gangen, så står jeg med problemet:

------------------------------------------------------------

Liste testen...
Hjem | Viser 181-50 af 50 [dropdown viser 20] | « Tilbage - Frem | Du er nu på side 10

------------------------------------------------------------

Gir det nogen mening?
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