Avatar billede halden Nybegynder
02. januar 2004 - 12:08 Der er 27 kommentarer og
1 løsning

simpel tæller

jeg vil gerne lave en simpel tæller på min side. Den skal bare tælle et nummer op i en .txt fil hver gang der kommer en ny session.
Det her er hvad jeg har indtil videre:
void Page_Load(Object obj, EventArgs e) {
int tæller;
    lock(this) {
      FileStream file = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Open, FileAccess.Read);
      StreamReader sr = new StreamReader(file);
      tæller = Int32.Parse(sr.ReadLine());
      sr.Close();
      file.Close();
      if (Session.IsNewSession == true) {
        tæller++;
        FileStream file2 = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Create, FileAccess.Write);
        StreamWriter sr2 = new StreamWriter(file2);
        sr2.WriteLine(tæller);
        sr2.Flush();
        sr2.Close();
        file2.Close();
      }
    }
    antal.Text = tæller.ToString();
}

Problemet er bare at den tæller op hver gang jeg opdatere siden og det skal den jo ikke. Hvad er der galt og hvordan retter jeg det??????
Avatar billede halden Nybegynder
02. januar 2004 - 12:09 #1
p.s. er newbie til asp.net
Avatar billede don_nigger Nybegynder
02. januar 2004 - 12:12 #2
åbn din global.asax fil....

smid din kode ind i Sub Session_Start() metoden.

Så virker det...

Mvh

DN
Avatar billede medions Nybegynder
02. januar 2004 - 12:13 #3
Prøv sådan her:

void Page_Load(Object obj, EventArgs e) {
if (Session("seenbefore").Equals("true")) {
int tæller;
    lock(this) {
      FileStream file = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Open, FileAccess.Read);
      StreamReader sr = new StreamReader(file);
      tæller = Int32.Parse(sr.ReadLine());
      sr.Close();
      file.Close();
      if (Session.IsNewSession == true) {
        tæller++;
        FileStream file2 = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Create, FileAccess.Write);
        StreamWriter sr2 = new StreamWriter(file2);
        sr2.WriteLine(tæller);
        sr2.Flush();
        sr2.Close();
        file2.Close();
      }
    }
    antal.Text = tæller.ToString();
}

session("seenbefore") = "true";
}

//>Rune
Avatar billede medions Nybegynder
02. januar 2004 - 12:14 #4
Hov, sådan her selvf.:

void Page_Load(Object obj, EventArgs e) {
if (Session("seenbefore").Equals("false")) {
int tæller;
    lock(this) {
      FileStream file = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Open, FileAccess.Read);
      StreamReader sr = new StreamReader(file);
      tæller = Int32.Parse(sr.ReadLine());
      sr.Close();
      file.Close();
      if (Session.IsNewSession == true) {
        tæller++;
        FileStream file2 = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Create, FileAccess.Write);
        StreamWriter sr2 = new StreamWriter(file2);
        sr2.WriteLine(tæller);
        sr2.Flush();
        sr2.Close();
        file2.Close();
      }
    }
    antal.Text = tæller.ToString();
}

session("seenbefore") = "true";
}

//>Rune
Avatar billede halden Nybegynder
02. januar 2004 - 12:39 #5
if (Session("seenbefore").Equals("false")) {
giver følgende:
CS0118: 'System.Web.UI.Page.Session' angiver 'egenskab', hvor 'metode' var forventet
Avatar billede medions Nybegynder
02. januar 2004 - 12:41 #6
Hmm prøv sådan her:

if (session("seenbefore") == "false") {

//>Rune
Avatar billede halden Nybegynder
02. januar 2004 - 12:47 #7
den kommer jo aldrig derind - seenbefore skal jo sættes til false et eller andet sted inden...
og session er med stort forbogstav: Session
Avatar billede medions Nybegynder
02. januar 2004 - 12:49 #8
Hov... Hehe, den skal selvf. være tom!
if (session("seenbefore") == null) {

//>Rune
Avatar billede halden Nybegynder
02. januar 2004 - 12:50 #9
->don nigger - er jo newbie til asp.net: hvad er global.asax og hvad bruges den til????
Avatar billede medions Nybegynder
02. januar 2004 - 12:50 #10
Sådan her skal det se ud:

void Page_Load(Object obj, EventArgs e) {
if (Session["seenbefore"] == null) {
int tæller;
    lock(this) {
      FileStream file = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Open, FileAccess.Read);
      StreamReader sr = new StreamReader(file);
      tæller = Int32.Parse(sr.ReadLine());
      sr.Close();
      file.Close();
      if (Session.IsNewSession == true) {
        tæller++;
        FileStream file2 = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Create, FileAccess.Write);
        StreamWriter sr2 = new StreamWriter(file2);
        sr2.WriteLine(tæller);
        sr2.Flush();
        sr2.Close();
        file2.Close();
      }
    }
    antal.Text = tæller.ToString();
}

Session["seenbefore"] = "true";
}

//>Rune
Avatar billede halden Nybegynder
02. januar 2004 - 12:52 #11
jeps, men nu vil den slet ikke skrive antallet i min asp:label...
Avatar billede halden Nybegynder
02. januar 2004 - 12:54 #12
det skal åbenbart være Session["seenbefore"] istedet for Session("seenbefore") - ellers laver den fejl: underligt
Avatar billede medions Nybegynder
02. januar 2004 - 12:55 #13
Det er fordi din Session ER aktiv nu... Luk din Explorer ned eller genstart computeren for at vær sikker, så vil det virke!

-du kan oxo vente 20 min. til at den ikke er aktiv længere din session!

//>Rune
Avatar billede medions Nybegynder
02. januar 2004 - 12:55 #14
halden> Det var oxo det jeg skrev i mit sidste svar ;o)

//>Rune
Avatar billede halden Nybegynder
02. januar 2004 - 13:02 #15
nu virker det næsten - åbnet en ny explorer og antallet blev opdateret men så prøvede jeg at opdatere siden og tallet forsvandt. Men det er jo klart-den kommer jo ikke ind i if'en denne gang...
Avatar billede halden Nybegynder
02. januar 2004 - 13:05 #16
endte med det her og det virker:
int tæller;
    FileStream file = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(file);
    tæller = Int32.Parse(sr.ReadLine());
    sr.Close();
    file.Close();
    if ( Session["seenbefore"] == null ) {
      lock(this) {
        if (Session.IsNewSession == true) {
          tæller++;
          FileStream file2 = new FileStream(Server.MapPath("./data/tæller.txt"), FileMode.Create, FileAccess.Write);
          StreamWriter sr2 = new StreamWriter(file2);
          sr2.WriteLine(tæller);
          sr2.Flush();
          sr2.Close();
          file2.Close();
        }
      }
    }
    antal.Text = tæller.ToString();
    Session["seenbefore"] = "true";
Avatar billede halden Nybegynder
02. januar 2004 - 13:07 #17
tak for det medions-ud hjalp mig til løsningen så skriv et svar for at få dine velfortjente point. Endnu en gang tak
Avatar billede medions Nybegynder
02. januar 2004 - 13:10 #18
Anytime...

-Du mangler vidst lige at acceptere svaret ;o)

//>Rune
Avatar billede medions Nybegynder
02. januar 2004 - 13:30 #19
Thx 4 Poinz

//>Rune
Avatar billede nielsbrinch Nybegynder
02. januar 2004 - 13:33 #20
don_niggers løsning var efter min mening langt, langt bedre. Global.asax er en fil der gerne skulle være oprettet automatisk i VS.NET sammen med dine andre filer.
Avatar billede halden Nybegynder
02. januar 2004 - 13:36 #21
hvorfor er den bedre???
jeg bruger ikke vs.net
Avatar billede nielsbrinch Nybegynder
02. januar 2004 - 13:46 #22
Fordi så lader du .NET håndtere alle de ting med sessions du lige havde problemer med at indstille. Det synes jeg er bedre og simplere.

Global.asax-filerne skal ligge ved siden af dine øvrige aspx-filer. Mine filer ser sådan ud:

Global.asax:
<%@ Application Codebehind="Global.asax.cs" Inherits="vlife.Global" %>

Global.asax.resx:
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:element name="root" msdata:IsDataSet="true">
            <xsd:complexType>
                <xsd:choice maxOccurs="unbounded">
                    <xsd:element name="data">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                            </xsd:sequence>
                            <xsd:attribute name="name" type="xsd:string" />
                            <xsd:attribute name="type" type="xsd:string" />
                            <xsd:attribute name="mimetype" type="xsd:string" />
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="resheader">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                            </xsd:sequence>
                            <xsd:attribute name="name" type="xsd:string" use="required" />
                        </xsd:complexType>
                    </xsd:element>
                </xsd:choice>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    <resheader name="ResMimeType">
        <value>text/microsoft-resx</value>
    </resheader>
    <resheader name="Version">
        <value>1.0.0.0</value>
    </resheader>
    <resheader name="Reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <resheader name="Writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
</root>

Global.asax.cs:
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;

namespace vlife
{
    /// <summary>
    /// Summary description for Global.
    /// </summary>
    public class Global : System.Web.HttpApplication
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        public Global()
        {
            InitializeComponent();
        }   
       
        protected void Application_Start(Object sender, EventArgs e)
        {
            DBInfo info = new DBInfo();
            Database.Initialize(5, "DATABASE="+info.Database+";Driver=mysql;SERVER="+info.Server+";UID="+info.Userid+";PWD="+info.Password+";");
        }

        protected void Session_Start(Object sender, EventArgs e)
        {
            Session.Timeout = 20;
            Session.Add("f", new F());
        }

        protected void Application_BeginRequest(Object sender, EventArgs e)
        {

        }

        protected void Application_EndRequest(Object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(Object sender, EventArgs e)
        {

        }

        protected void Application_Error(Object sender, EventArgs e)
        {

        }

        protected void Session_End(Object sender, EventArgs e)
        {

        }

        protected void Application_End(Object sender, EventArgs e)
        {
            Database.Close();
        }
           
        #region Web Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.components = new System.ComponentModel.Container();
        }
        #endregion
    }
}

Det er i sidstnævnte du kan finde Session Start.

Jeg ved ikke særligt meget teoretisk om det, og om det vil virke at du kopierer mine tekster ind i dine egne filer og tilføjer dem til dit projekt.
Avatar billede halden Nybegynder
02. januar 2004 - 14:13 #23
tror sku jeg vil prøve at smide mine filer over i et projekt i VS.NET og udvikler derfra istedet, så opretter den jo selv de filer du snakker om
Avatar billede halden Nybegynder
02. januar 2004 - 16:05 #24
nu fik jeg sku smidt det hele over i VS.NET og udvikler derfra nu. Fik også koden lagt ind i Session_Start. Tak for forslaget
Avatar billede don_nigger Nybegynder
02. januar 2004 - 23:21 #25
>>> medions

Sikke da en omgang tåbelig kode der bliver demonstreret her!

Det er jo netop dette man skal undgå.

Smid da en lille session tæller ind i Session_Start metoden, og skriv det i text filen fra global.asax og problemet er løst. Der er da ingen grund til at lave tingene mere besværlige end de i forvejen er.

Keep it simple and keep coding...

:-)

BTW Happy new year guys.
Avatar billede nielsbrinch Nybegynder
02. januar 2004 - 23:26 #26
don_nigger, hvordan kan han det, hvis han ikke har nogen Global.asax?
Avatar billede halden Nybegynder
02. januar 2004 - 23:59 #27
det er rigtigt nielsbrinch - tidligere havde jeg ikke den fil men nu har jeg fået det hele ind og køre fra VS.NET så nu har jeg filerne.
-> don nigger: hvis du mener det er så simpelt så kunne du måske give et eksempel på det og også hvordan man tilgår den tæller fra aspx siden.
Avatar billede don_nigger Nybegynder
03. januar 2004 - 21:05 #28
>>> halden

som jeg sagt, opretter du enten en session variabel eller en application variabel. Den variabel kan du tilgå hvor som helst, når som helst.

Hvis du vil have noget demo kode, så opret et nyt spm. for du har jo givet dine points til medions.

Fortsæt god lørdag!

:-)
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