Avatar billede c-sharp Nybegynder
16. februar 2007 - 14:42 Der er 15 kommentarer og
2 løsninger

Hente parametere fra forrige side i ASP.net 2.0

Er der ikke noget med at man på en nem måde kan hente parameter fra en forgånede side i ASP.net 2.0?

Jge har en lang liste af checkbox's der er genereret ved hjælp af en repeater, hvordan får jeg nemmest fat i hvilket checkbox's der er hakket af fra den forgående side.
Avatar billede kalp Novice
16. februar 2007 - 14:48 #1
Dem som er checked er vel også kun dem som kommer med i din querystring.
Så Request.QueryString.GetValues("checkboxnavn");
returnere en liste med.
Avatar billede c-sharp Nybegynder
16. februar 2007 - 14:58 #2
Jeg aner jo ikke hvad de hedder, de er jo publiceret ved hjælp af en repeater
Avatar billede kalp Novice
16. februar 2007 - 15:10 #3
så du tror at man ud fra en tekst streng kan få .NET til at finde ud af hvad der hører til hvad? :)
jeg tror .NET er for dum til det.

Det du kan gøre er at give alle checkbox samme id, men hver sit navn (ellers er det omvendt)
så kan du requeste dem alle ud fra en enkelt betegnelse.

men lytter gerne med.. er da rimelig sejt hvis .NET kan det andet og så lære jeg også noget nyt som jeg helt sikkert kan bruge:)
Avatar billede kalp Novice
16. februar 2007 - 15:14 #4
ja har lige testet..

<input type="checkbox" name="raekkeet" id="aksdas"  value="checkbox">
<input type="checkbox" name="raekkeet" id="g4fes"  value="checkbox">
<input type="checkbox" name="raekkeet" id="dhuukui"  value="checkbox">
<input type="checkbox" name="raekkeet" id="gdfgdf"  value="checkbox">


de har forskellige id'er så man kan godt skelne mellem dem.
og så kan jeg requeste dem via.

Request.QueryString.GetValues("raekkeet");

hvilket returnere et array med dem som er checked.
Avatar billede snepnet Nybegynder
16. februar 2007 - 16:55 #5
Måske tænker du på, at man kan poste til en anden side - og fra den anden side har adgang til den side der er postet fra.

Hvis du har en side 1.aspx her:
(læg mærke til PostBackUrl på knappen)

<asp:Repeater ID="rep" runat="server">
    <ItemTemplate>
        <asp:CheckBox ID="chk" runat="server" />
    </ItemTemplate>
</asp:Repeater>
<br />
<asp:Button ID="Button2" runat="server" PostBackUrl="2.aspx" Text="Button" /></div>

Og så noget kode på 2.aspx.cs

Repeater rep = this.PreviousPage.FindControl("rep") as Repeater;
foreach (RepeaterItem item in rep.Items)
{
    CheckBox chk = item.FindControl("chk") as CheckBox;
}

... Der er masser af muligheder for at gøre den slags lidt lækrere - bare sig til ;o)

Er det sådan noget du gerne vil?

Mvh
Avatar billede c-sharp Nybegynder
19. februar 2007 - 07:56 #6
Det er lige præcis noget ala det jeg vil frem til :-)

Der er bare en lille detalje, den næste side skal vare et nyt vindue. Hvordan håndtere jeg det?
Avatar billede kalp Novice
19. februar 2007 - 08:45 #7
det kan sikkert gøres anderledes, men hvis du tilføjer lidt javascript..
f.eks denne funktion.
function Open(url)
{
window.open(url)
}

og på knappen laver

<asp:Button ID="Button2" runat="server" PostBackUrl="2.aspx" onClick="2.aspx.cs" Text="Button" />

men har ikke testet.. du kan om ikke andet afprøve om det kan benyttes.
Avatar billede c-sharp Nybegynder
19. februar 2007 - 10:21 #8
snepnet: Når jeg afvikler noget ala det du har skrevet kan jeg ikke får fat i repateren fra den forgående side :-(
Avatar billede c-sharp Nybegynder
19. februar 2007 - 10:40 #9
Jeg kan godt se værdierne når jeg debugger men jeg kan ikke finde dem med FindControl.
Avatar billede c-sharp Nybegynder
19. februar 2007 - 11:15 #10
Kan det have noget at gøre med at jeg bruger MasterPage?
Avatar billede snepnet Nybegynder
19. februar 2007 - 23:08 #11
Ja det har det beklageligvis ... Du må prøve en:
Repeater rep = this.PreviousPage.Master.FindControl("navn").FindControl("rep") as Repeater;

"navn" skal du så udskifte på navnet på den contentplaceholder du har din repeater liggende i.

Mvh
Avatar billede c-sharp Nybegynder
20. februar 2007 - 08:48 #12
Super mange tak for hjælpen :)

Den med det ny vindue blev håndteret på følgende måde:

<asp:Button ID="Button1" Text="Næste" style="float:right" OnClientClick="window.document.forms[0].target='newwindowhere';"  PostBackUrl="~/admin/nytvindue.aspx" runat="server" />

Snepnet: Lige et hurtigt spørgsmål, Jeg kan se at du skriver "item.FindControl("chk") as CheckBox;" er det pænere end at skrive "(CheckBox)item.FindControl("chk")"?

Smid svar så kaster jeg med point ;~}
Avatar billede kalp Novice
20. februar 2007 - 09:16 #13
"(CheckBox)item.FindControl("chk")"?

smider en exception hvis det ikke kan castes.. og din hjemmeside fejler.

item.FindControl("chk") as CheckBox;"
returnere null hvis den ikke kan castes og dit program crasher ikke.


mvh
Qawi
Avatar billede kalp Novice
20. februar 2007 - 09:19 #14
Du kan faktisk lave et smart check så du sikre dig det ikke crasher..
if(Control is CheckBox)
{
CheckBox checkbox = control as CheckBox;
// og din kode her
}
Avatar billede snepnet Nybegynder
20. februar 2007 - 22:40 #15
Ja jeg synes normalt det er at foretrække - og den vil normalt gå hånd i hånd med en forespørgsel på null:

SomeType obj = someObj as SomeType;
if(obj != null)
{
  // du er her garanteret en gyldig SomeType reference
}

Mvh
Avatar billede c-sharp Nybegynder
21. februar 2007 - 06:08 #16
Tusind tak for hjælpen alle sammen :)

Jeg har lige forhøjet pointene så gawi smid et svar så får du de 15 point for din ivrige indstas!
Avatar billede kalp Novice
21. februar 2007 - 09:39 #17
Det er ellers okay:)

ps. det her

item.FindControl("chk") as CheckBox
if(Control is CheckBox)
{

giver samme resultat som det her

item.FindControl("chk") as CheckBox
if(obj != null)
{

det er måske bare lidt mere læsevenligt med "is"
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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Senior Delivery Manager

Cognizant Technology Solutions Denmark ApS

Service Line Specialist - ServiceNow (Thirdera)

Udviklings- og Forenklingsstyrelsen

Webanalytiker til digitale løsninger