Avatar billede alpapa Nybegynder
21. marts 2004 - 17:53 Der er 15 kommentarer og
1 løsning

Mister viewstate med QueryStrings?

Hejsa Eksperter

Hvorfor mister jeg alle mine eksisterende data på min aspx side, når jeg smider en querystring op i adresselinien?

Altså, ved klik på denne fætter mister jeg bl.a min repeater:
(<a href="?aID=<%# DataBinder.Eval(Container.DataItem, "ID")%>")

Er der en måde at undgå dette på?

alpapa
Avatar billede alpapa Nybegynder
21. marts 2004 - 18:07 #1
PS. Har prøvet med EnableViewState="true" - det hjælper heller ikke?
Avatar billede burningice Nybegynder
22. marts 2004 - 08:49 #2
viewstate bliver kun bibeholdt ved postback
Avatar billede alpapa Nybegynder
22. marts 2004 - 20:04 #3
Okay - kan jeg gemme min viewstate i en Session["min_viewstate"], eller er der andre muligheder der er at foretrække?
Avatar billede burningice Nybegynder
22. marts 2004 - 20:54 #4
det kan du godt... Session["et_eller_andet"] = Viewstate["et_eller_andet"]
Avatar billede burningice Nybegynder
22. marts 2004 - 20:54 #5
men så kan du jo ligeså godt droppe viewstate helt og bare gemme det hele i sessions??
Avatar billede alpapa Nybegynder
23. marts 2004 - 22:42 #6
Ja cyberfessor, det er noget gylle - måske du har et bedre foreslag...

Har som sagt en repeater på siden med en masse navne i - idéen var, at ved klik på et navn skulle komme nogle personlige data om personen. Dette id ville jeg smide op i querystringen, men det dutter ikke!
Kan jeg på en måde smide en sessionvariabel med personens id, så jeg bibeholder mine data på siden??? Har prøvet fra et link (både med og uden runat="server"), UDEN held!

Et eller andet med (i C#):
if(this.IsPostBack)
{
if(null != Session["ansatID"])
{
AnsatData(int32.Parse(Session["ansatID"]));
}
}

Har også prøvet at sende id'et til et javascript, dette virker også perfekt, men jeg kan ikke finde ud af at kalde en metode fra javascriptet?!?

Ved du hvordan dette kan gøres, eller har du andre alternativer???

alpapa
Avatar billede burningice Nybegynder
24. marts 2004 - 00:35 #7
Du kan bruge et commandlink som er et link som trigger et postback. Ved at tjekke hvilket link der blev trykket på kan du få fat i den ansattes id ud fra din repeater.

her er der et eksempel med et datagrid... hvis det er kan jeg godt strikke et eksempel sammen med en repeater hvis du ikke selv kan komme videre herfra

protected void dgUsers_ItemCommand(object sender, DataGridCommandEventArgs e)
        {
            string email = e.Item.Cells[3].Text;

            switch(e.CommandName)
            {
                case "Edit":
                   
                    Response.Redirect("user_edit.aspx?email="+ email, true);
                    break;

                case "Delete":
                   
                    Connect.dk.User u = new Connect.dk.User(email);

                    u.Delete();

                    Response.Redirect("users.aspx", true);
                    break;
            }
        }
Avatar billede alpapa Nybegynder
24. marts 2004 - 16:20 #8
Great - det må du meget gerne hvis du har tid...

Skal jeg poste noget kode eller laver du bare et eksempel?
Avatar billede alpapa Nybegynder
28. marts 2004 - 21:27 #9
cyberfessor - ville du lave et eksempel med et commandlink i en repeater?
Avatar billede burningice Nybegynder
29. marts 2004 - 08:45 #10
hejsa... jo.. jeg har lige været væk et par dage... men nu er jeg tilbage i civilisationen :)
Avatar billede alpapa Nybegynder
30. marts 2004 - 21:48 #11
Super, har du været i udlandet eller bare i jylland? ;-)
Avatar billede burningice Nybegynder
31. marts 2004 - 17:51 #12
:P hov hov.. jeg bor i Grenaa kammerat ;) Ej... bare en lidt fritid med kæresten (= no computing).

Well, mon ikke du kan bruge det her http://www.burningice.dk/eksperten.dk/480097/Default.aspx

Source:

<%@Import Namespace="System.Data" %>

<script language="c#" runat="server">

void Page_Load(object sender, EventArgs e) {
    DataTable dt = new DataTable();

      dt.Columns.Add(new DataColumn("id", typeof(int)));
      dt.Columns.Add(new DataColumn("data", typeof(string)));

      for (int i = 0; i < 10; i++) {
        DataRow dr = dt.NewRow();
        dr["id"] = i;
        dr["data"] = "data for row "+ i;
        dt.Rows.Add(dr);
      }
     
      DataSet ds = new DataSet();
      ds.Tables.Add(dt);
     
      rpt.DataSource = ds.Tables[0];
      Page.DataBind();
}

void rpt_ItemCommand(object sender, RepeaterCommandEventArgs e) {

message.Text = "Du trykkede på "+ ((Label)e.Item.FindControl("lbl")).Text;

}

</script>
<form runat="server">
<asp:repeater ID="rpt" runat="server" OnItemCommand="rpt_ItemCommand">

<ItemTemplate>

<asp:label ID="lbl" Text='<%# DataBinder.Eval(Container.DataItem, "id") %>' runat="server" /> <asp:LinkButton ID="lnk" runat="server" Text="Tryk på mig" />
<br />

</ItemTemplate>

</asp:repeater>

</form>

<asp:label ID="message" runat="server" />
Avatar billede burningice Nybegynder
31. marts 2004 - 17:52 #13
det er specielt LinkButton, OnItemCommand og ((Label)e.Item.FindControl("lbl")).Text der er det interressante
Avatar billede alpapa Nybegynder
03. april 2004 - 16:40 #14
Det spiller for vildt ;-)
Tak cyberfessor...
Avatar billede alpapa Nybegynder
03. april 2004 - 16:40 #15
Husk at smide et svar
Avatar billede burningice Nybegynder
06. april 2004 - 20:07 #16
whe... tilbage fra skiferie

svar :)
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
Kurser inden for grundlæggende programmering

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