Avatar billede fanatic Nybegynder
18. april 2006 - 23:53 Der er 5 kommentarer og
1 løsning

Variabel gemmes ikke? (Sessions)

Hej Eksperter.

Jeg laver en simpel administrations-side til min website. På denne side er der en dropdownlist som indeholder samtlige filer der er på min website. Det er så meningen at så snart jeg vælger en fil i listboksen så skal sourcen til denne vises i en tekstboks.
Jeg kan dog ikke få det til at virke. dropdownlisten bliver ved med at "nulstille sig" og den fil der klikkes på gemmes åbenbart ikke selvom jeg har forsøgt med en Session["stream"]. Sourcen til code-behindfilen er herunder. Det er metoden: ddlEditPage_SelectedIndexChanged der kaldes når der i dropdownlisten vælges en fil. Kan i se hvad jeg gør galt..beklager at koden måske er lidt rodet efter at jeg har forsøgt alt muligt :-(


public partial class Admin : System.Web.UI.Page
{
    private string selected;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Session["selected"] = selected;
            Session["stream"] = "";

            DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath(@"~\"));
            FileInfo[] fileList = dirInfo.GetFiles();

            ddlEditPage.DataSource = fileList;
            ddlEditPage.DataBind();


        }
        ddlEditPage.SelectedValue = (string)Session["selected"];
        Label1.Text = (string)Session["selected"];
        txbEditPage.Text = (string)Session["stream"];
       

    }
   
    protected void btnEditPage_Click(object sender, EventArgs e)
    {
        StreamReader sr;
        txbEditPage.Text = "";
        string selected = "";
        //selected = ddlEditPage.SelectedValue;

        Session["selected"] = ddlEditPage.SelectedValue;
        selected = Session["selected"].ToString();

        try
        {
            sr = File.OpenText(Server.MapPath(selected));

            txbEditPage.Text = sr.ReadToEnd();
            sr.Close();
        }
        catch (Exception eee)
        {
            Response.Write(eee.Message);
            Response.End();
        }
        finally
        {
           
        }
    }

    protected void ddlEditPage_SelectedIndexChanged(object sender, EventArgs e)
    {
        StreamReader sr;
        txbEditPage.Text = "";

        Session["selected"] = ddlEditPage.SelectedItem.Text;

        try
        {
            sr = File.OpenText(Server.MapPath(@"~\" + Session["selected"].ToString()));

            Session["stream"] = sr.ReadToEnd();
            txbEditPage.Text = Session["stream"].ToString();
            sr.Close();
        }
        catch (Exception eee)
        {
            Response.Write(eee.Message);
            Response.End();
        }
        finally
        {

        }
    }
}
Avatar billede dr_chaos Nybegynder
19. april 2006 - 07:56 #1
ligger dropdownlisten i en usercontrol ?
Avatar billede fanatic Nybegynder
19. april 2006 - 08:44 #2
Ja her er aspx-filen:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
    CodeFile="EditSite.aspx.cs" Inherits="Admin" ValidateRequest="false" %>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
    <div style="text-align: left">
        <br />
        Rediger website:
        <asp:DropDownList ID="ddlEditPage" runat="server" OnSelectedIndexChanged="ddlEditPage_SelectedIndexChanged" AutoPostBack="True">
        </asp:DropDownList><br />
        <br />
        <asp:TextBox ID="txbEditPage" runat="server" Height="290px" TextMode="MultiLine"
            Width="95%"></asp:TextBox><br />
        <asp:Button ID="btnEditPage" runat="server" OnClick="btnEditPage_Click" Text="Gem ændring" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        </div>
</asp:Content>
Avatar billede dr_chaos Nybegynder
19. april 2006 - 08:45 #3
prøv at sætte et breakpoint udfor:
if (!Page.IsPostBack)
     
jeg vil gætte på at du kommer ind i den del af siden konstant
Avatar billede fanatic Nybegynder
21. april 2006 - 14:38 #4
chaos>> Jeg benyttede debug og satte et breakpoint. Den kommer ikke ind i if'en. Men hvorfor skulle den da også gøre det?
Men vha. debugging fandt jeg frem til fejlen. jeg overskrev værdien nede i eventmetoden. Sjuskeri fra min side :-) Send et svar så får du point for at minde mig om at bruge den fremragende debugger, tak for hjælpen ;-)

Forresten.... Når man laver eks. et indkøbssystem som skal huske alle de felter en bruger udfylder. Hvad er så den rigtige måde at gøre det på?

Vedligeholder man et objekt som gemmes i Session["...."]?

Hvad hvis der er 100 brugere på siden samtidigt så overskriver de jo den samme Session["...."] eller hvordan?
Avatar billede snepnet Nybegynder
21. april 2006 - 18:31 #5
det er en jævnligt benytte løsning, at vedligeholde det i session, men hvis du ønsker at sikre at data ikke forsvinder ved session timeout er det ikke godt nok.
benyt f.eks. profiles, eller en anden databasebaseret løsning... det har andre fordele også.
når en bruger hopper ind på dit site, får de deres egen session.
mvh
Avatar billede dr_chaos Nybegynder
21. april 2006 - 18:44 #6
jeg er enig med snepnet i den betragtning.
Det kommer meget an på hvad dit behov er.
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