Avatar billede renard Nybegynder
18. november 2006 - 19:02 Der er 10 kommentarer og
1 løsning

Cross page postback problem

Jeg er begynder i ASP.NET og C# og er løbet ind i et problem med cross page postback. labelResult på Page2 skal vise indholdet af txtName fra Page1.

3 forsøg:
labelResult.Text = Request["txtName"];
-der sker ikke noget, kommer ikke noget i labelResult.

labelResult.Text = Request["txtName"].ToString();
-"NullReferenceException"..."Object reference not set to an instance of an object."

labelResult.Text = PreviousPage.Request["txtName"];
-"HttpException"..."Request is not available in this context"
Avatar billede renard Nybegynder
18. november 2006 - 19:09 #1
Submit-knappen på Page1 har PostBackUrl Page2.
Avatar billede sneakraid Nybegynder
18. november 2006 - 23:46 #2
Jeg synes du skal læse lidt om cross page postback:
http://www.c-sharpcorner.com/UploadFile/DipalChoksi/xpgpostbk_asp2_dc08102006235543PM/xpgpostbk_asp2_dc.aspx?ArticleID=9e2b12e6-7842-419d-a3c9-df58f6aba523

Egentlig synes jeg ik cross page postback virker pisse fedt i asp.net. Men der må også være en smartere måde at løse dit "problem" på. Hvorfor poste noget til en anden side, som så kan "håndtere" det. Det er jo derfor der er noget så smart i .net som events, så du kan udføre en handling så snart et event bliver fyret (f.eks. via et tryk på en knap) :)
Avatar billede snepnet Nybegynder
19. november 2006 - 10:30 #3
Jeg vil anbefale dig at lægge public properties på den side du poster fra, og så tilgå dem via dit previous page objekt på den side du poster til.
Submitter du fra en side hvor klassen hedder PageFrom - kan du gøre sådan her:

// på den du poster fra
public string SomeText
{
  get{return txtName.ToString();}
}

// og på den du poster til
if(!IsPostBack)
{
  PageFrom from = PreviousPage as PageFrom;
  if(from != null)
  {
    string tekst = from.SomeText;
  }
}

Hvis du vil slippe for at typecaste - kan du direkte i dit page directive angive previous page typen:
<%@ PreviousPageType VirtualPath="PageFrom.aspx" %>

Hvorved du kan tilgå dine properties direkte:
if(!IsPostBack)
{
  string tekst = PreviousPage.SomeText;
}

Mvh
Avatar billede renard Nybegynder
19. november 2006 - 16:54 #4
Tak Snepnet, jeg har fået det første til at virker, med typecasting.

Jeg er lidt i tvivl om hvor jeg skal smide
<%@ PreviousPageType VirtualPath="PageFrom.aspx" %>
hen...

Mit page directive på TargetPage ser p.t. sådan ud.
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Title" %>
Avatar billede snepnet Nybegynder
19. november 2006 - 18:41 #5
Det er nok fordi jeg formulerer mig temmelig kludret :o)
Det skal ikke lige i dit pagedirective ... Det er et directive for sig, så du sætter bare det jeg skrev ind nedenunder dit pagedirective (sorry).
Og så hedder din side nok ikke pagefrom.aspx som jeg har brugt :o)
Mvh
Avatar billede renard Nybegynder
19. november 2006 - 19:49 #6
OK, det virker delvist. Jeg får adgang til properties i PageFrom.aspx fra Default.aspx(jo, brugte navnet PageFrom.aspx ;), når jeg skriver PreviousPage. Men ved run får jeg "Object reference not set to an instance of an object" ved:

string day = PreviousPage.chosenDay;

I PageFrom:
public string chosenDay
    {
        get { return Calendar1.SelectedDate.Day.ToString(); }
    }

Jeg komme fra klassisk asp, så OO-tænkning er stadig ret nyt...
Avatar billede snepnet Nybegynder
19. november 2006 - 20:41 #7
Du må debugge ned igennem og se hvad problemet er, men du skal huske at trække de værdier fra PreviousPage udelukkende når der er tale om et crosspage postback.
Du kan kun tilgå din previous page når siden køres første gang, og du bliver derfor nød til at checke på IsPostBack ... Gør du det?
Du kan evt. vise lidt mere kode.
Mvh
Avatar billede renard Nybegynder
19. november 2006 - 22:29 #8
Hmm, det jeg gør opfattes åbenbart ikke som crosspage postback. IsCrossPagePostBack er false.
Jeg har PostBackUrl default.aspx på en knap på pagefrom.aspx. Hvad kræves der mere før IsCrossPagePostBack på default.aspx er true? Er jeg helt galt på den?!
Avatar billede snepnet Nybegynder
20. november 2006 - 13:55 #9
Prøv sådan her:

// pagefrom.aspx
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" PostBackUrl="~/PageTo.aspx" Text="Button" /></div>

Og en property i koden:
public string SomeText
{
    get { return this.TextBox1.Text; }
}


// pageto.aspx
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

og et previoustype directive:
<%@ PreviousPageType VirtualPath="~/PageFrom.aspx" %>

Og lidt kode:
if (PreviousPage.IsCrossPagePostBack)
{
    this.Label1.Text = PreviousPage.SomeText;
}

Bemærk at det er på PreviousPage du skal spørge på om der er tale om et crosspagepostback ... På den aktuelle side vil den altid være false.

Mvh
Avatar billede renard Nybegynder
22. november 2006 - 13:56 #10
Super, det virker. Takker, Snepnet.
Læg et svar til point.
Avatar billede snepnet Nybegynder
23. november 2006 - 17:17 #11
Kommer her :o)
Mvh
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