Avatar billede ladyhawke Novice
01. oktober 2007 - 14:59 Der er 56 kommentarer og
2 løsninger

Tilgang til hidden input felt fejler i code behind

http://www.eksperten.dk/spm/798959
http://www.eksperten.dk/spm/798443

Mit spørgsmål er opstået på baggrund af de ovenstående spørgsmål. Bemærk dette omhandler .NET 1.1.
Det består i følgende...

Jeg har lavet et input felt i min aspx side:
<input id=test type=hidden value="<%=FTest%>" name=test runat=server>
Den værdi sættes på en side (jeg kan se den har en værdi når jeg submitter/poster til side 2)

På side 2 forsøger jeg
protected System.Web.UI.HtmlControls.HtmlInputHidden test;
...
string strTest = test.Value

og får en "NullReferenceException: Object reference not set to an instance of an object", hvorfor kan jeg ikke få fat i mit hidden input fra min postede form på den nye side?
Avatar billede sherlock Nybegynder
01. oktober 2007 - 15:07 #1
Du skal bruge Request["test"].
Du kan ikke deklarere en kontrol fra den foregående side i din codebehind.
Avatar billede kalp Novice
01. oktober 2007 - 15:09 #2
ladyhawke ->

Du kan ikke skrive test.Value da den kontrol jo ikke findes på side2.
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:14 #3
jo den gør, jeg har ikke skrevet deklerationen i spørgsmålet, men der er én præcis magen til den på side 1...

Desuden har jeg prøvet med sherlocks forslag og Request.Form["test"] uden held
Avatar billede kalp Novice
01. oktober 2007 - 15:17 #4
ladyhawke ->

prøv evt. med noget valid kode - måske er det bare det som gør at Request ikke fungerer for dig:)

<input id="test" type="hidden" value="<%=FTest%>" name="test" runat="server">
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:18 #5
måske er det sådan at jeg kommer til at overskrive den der har en værdi, med den jeg har på side 2, men hvordan undgår man så det?
Avatar billede kalp Novice
01. oktober 2007 - 15:18 #6
nej din variabel på side2 har intet med sagen at gøre:)
den får du nemlig ikke fat i via. Request;)
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:19 #7
hmmmm, den kræver det bestemt ikke, men jeg kan da godt prøve ad (den værdi jeg kan se bliver sat, virker uden "")
Avatar billede neoman Novice
01. oktober 2007 - 15:21 #8
Det er samme problematik som med viewstate - det der er på EEN side på klienten har intet med en ANDEN side at gøre. Det du vil gemme skal du gøre serverside, eller session/cookie/db :)
Avatar billede kalp Novice
01. oktober 2007 - 15:25 #9
Hvis hendes form poster til en anden side er det jo ikke et problem.
dvs. hvis hendes form er lavet som <form action="side2.aspx" ....>
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:25 #10
skulle jeg ikke kunne tage fat i værdien af den form der bliver posted og så sætte mine variable på den nye side? ellers kan post da være lige gyldigt... så kan man jo heller ikke i gammeldags html overføre via hidden input og det går da mig bekendt udmærket
Avatar billede kalp Novice
01. oktober 2007 - 15:27 #11
ladyhawke -> præcis.

men tror problemet du har bliver svært, at gætte da du nok bare gør et eller andet forkert et sted - hvor er svært at side da vi ikke kan se hvad du har lavet:)
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:30 #12
hmmmm... jeg er nødt til at håndkopiere koden, men ved ikke om jeg kan finde mere der kan belyse yderligere... ser dog ud til at "" i input tag'et får den til at gå i spunk...
Avatar billede neoman Novice
01. oktober 2007 - 15:38 #13
du kan da sagtens få fat i værdien, men du bliver nødt til at tænke lidt på hvad der er hvad.

Din nye side kender intet til KONTROLLER på den gamle. Den eneste måde du kan få fat i værdierne fra den gamle er via det som bliver postet, og dette er så tilgængeligt i Request objektet og ikke andre steder
Avatar billede neoman Novice
01. oktober 2007 - 15:41 #14
Det er som sherlock allerede har påpeget.. kig på Request.Form("navnet på hiddenfield")
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:42 #15
Jeg er sikker på problemet ligger i det område, men har pt. ikke fået fat i den rigtige værdi og lige nu driller page_load på første side (samme fejl), fordi jeg lige skal finde en passende default for hvis value ikke er sat...
Avatar billede neoman Novice
01. oktober 2007 - 15:43 #16
og hvis dit hiddenfield har runat=server, så bliver dens ID lavet om på klienten For at teste kan du kigge i source koden på klienten for at se hvordan feltet hedder, og så hardkode det navn i din request.form, blot til at starte med.
Avatar billede kalp Novice
01. oktober 2007 - 15:51 #17
neoman >> nej den bliver ikke lavet om:) det er kun hvis noget er placeret i en usercontrol eller hvis sin arver fra masterpage.
Avatar billede kalp Novice
01. oktober 2007 - 15:51 #18
- om det er tifældet skal jeg selvfølgelig ikke kunne sige.
Avatar billede neoman Novice
01. oktober 2007 - 15:52 #19
kalp - og her prøvede jeg lige at lede OP på afveje, hehe:)
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:54 #20
der er ingen user controls og masterpages i det her :o)
Avatar billede kalp Novice
01. oktober 2007 - 15:56 #21
ladyhawke ->

din input field lægger også mellem dine <form> tags?
Avatar billede ladyhawke Novice
01. oktober 2007 - 15:58 #22
jeps... arbejder lige med en mistanke... at de deklarerede hidden inputs i code behind mangler initialisering
Avatar billede kalp Novice
01. oktober 2007 - 16:00 #23
De skal bare erklæres i codebehind - det er så du kan "se" dem der...
det er som sagt lidt primitivt i 1.1 hvor man altså nærmest skal erklære dem i markup koden og så også i codebehind hvis man skal arbejde med dem der.

i 2.0 er det kun muligt at erklære dem ét sted hvilket også givet mest mening.

men de er initialiseret hvis du dem i din markup kode også;)
Avatar billede ladyhawke Novice
01. oktober 2007 - 16:01 #24
på side 1 var det initialiseringen der manglede, så nu retter jeg lige side 2 til og ser hvad der så sker
Avatar billede ladyhawke Novice
01. oktober 2007 - 16:08 #25
de var bare lavet som:
protected System.Web.UI.HtmlControls.HtmlInputHidden test;
der manglede en meget nødvendig:
test = new HtmlInputHidden();

arbejder lige med side 2 nu
Avatar billede ladyhawke Novice
01. oktober 2007 - 16:10 #26
Er nødt til at stoppe for idag, men jeg melder tilbage i morgen om det var synderen (manglende "new")
Avatar billede neoman Novice
01. oktober 2007 - 16:27 #27
hvis du har test = new HtmlInputHidden() i din kode, så er det jo en kontrol som er dynamisk tilføjet i code-behind, og du husker at gendanne den senest on page load når du laver postback ?
Avatar billede ladyhawke Novice
02. oktober 2007 - 11:38 #28
jeg er nødt til at lave en new på de controls ellers er det ikke et initialiseret objekt... (ser det ud til i .NET 1.1)

Mit problem lige nu er at når jeg forsøger at læse værdien af min variabel på side 2 (kommer til siden via response.redirect), så er min værdi tom (jeg forsøger at læse den med Request.Form["test"]), selvom jeg lige før siden går fra side 1 til 2 via view source, kan se at den har en værdi. Kan det være min response redirect der ikke submitter formen eller sådan noget og i så fald hvordan får jeg den overbevist?
Avatar billede ladyhawke Novice
02. oktober 2007 - 11:40 #29
nb, jeg laver kun new, hvis den kontrol der spørges til er null, ellers læser jeg den og hvis den er tom (string.Empty) forsøger jeg at læse fra form, men det er så her snoren knækker
Avatar billede kalp Novice
02. oktober 2007 - 11:41 #30
ladyhawke >>

ser ud til du ikke har læst

Kommentar: kalp
01/10-2007 13:17:19

i

http://www.eksperten.dk/spm/798959
Avatar billede sherlock Nybegynder
02. oktober 2007 - 11:53 #31
Uddybning: Response.Redirect giver ikke en post af side1. Det er en ren server-side ting.
Derfor skal du selv sætte værdien på Redirect-URL'en, som kalp skriver.
Avatar billede ladyhawke Novice
02. oktober 2007 - 12:21 #32
kan man virkelig ikke trigge en submit form serverside? Jeg ved jeg kan gøre det via response.write og javascript, men kan det ikke gøres simplere?
Avatar billede ladyhawke Novice
02. oktober 2007 - 12:29 #33
kalp>> joh jeg har læst det, men ville gerne undgår at sætte tingene manuelt i URL
Avatar billede neoman Novice
02. oktober 2007 - 12:35 #34
Hvis du vil gøre det kompliceret så kan du: http://aspnet101.com/aspnet101/tutorials.aspx?id=20
Avatar billede neoman Novice
02. oktober 2007 - 12:49 #35
Overall : det er svært at gætte hvad dine krav er, fordi disse ikke er specificeret, og du ikke af dig selv giver feedback på de kommentarer som kommer (duer/duer ikke, og i så fald hvorfor duer det ikke), og det gør livet svært for dem som forsøger at hjælpe dig.
Avatar billede kalp Novice
02. oktober 2007 - 12:58 #36
Jeg må indrømme, at hvis man laver Response.Redirect fra sin codebehind side af så bør man også selv videresende sine parametre:)

Det giver også mening - men måske er det bare dovenskab som gør det:)
Avatar billede sherlock Nybegynder
02. oktober 2007 - 13:12 #37
Selvom jeg havde Session til rådighed, ville jeg stadig bygge en url til en flygtig parameter. Det er det simpleste og mindst resourcekrævende.
Avatar billede ladyhawke Novice
02. oktober 2007 - 13:31 #38
jeg arbejder med nogle forskellige forslag, men det er lidt kompliceret at teste/evaluere, så du må meget undskylde det tager lidt tid at svare...
Avatar billede ladyhawke Novice
02. oktober 2007 - 13:32 #39
måske er url det bedste i den her sammenhæng, men der er temmelig meget jeg skal skrive om i hele applikationen i så fald og ja, kalde det bare dovenskab, men det har jeg forsøgt at undgå...
Avatar billede ladyhawke Novice
02. oktober 2007 - 13:42 #40
Kendte i øvrigt ikke den med Context, så der lærte jeg også noget
Avatar billede neoman Novice
02. oktober 2007 - 13:53 #41
Hvis det er noget som forekommer på mange sider, og eksempelvis kan pløkkes ind i pageload, så kunne du f.eks. lave en ny BasePage klasse, med en moddet PageLoad, som kunne plukke værdien ud af urlen og lægge den ind i det felt som der nu formentligt allerede er. Så skulle der, igen formentligt, kun ændres fra hvilken klasse den pågældende aspx side nedarver.
Avatar billede neoman Novice
02. oktober 2007 - 13:54 #42
Jeg tror du ville få de bedste råd hvis du lige lagde noget kode op så vi kunne se hvad det drejede sig om specifikt.
Avatar billede ladyhawke Novice
02. oktober 2007 - 13:56 #43
det ville være ret bøvlet, jeg har postet dele af det, men der er meget "støj" og jeg skal kopiere det i hånden, da jeg ikke har adgang til at benytte dette forum fra den maskine der udvikles på...

Pt. arbejder jeg på url løsningen, for at se om jeg kan få siderne til at lade være med at gå ned undervejs... der går lidt tid inden jeg har noget respons på det.
Avatar billede ladyhawke Novice
02. oktober 2007 - 14:52 #44
tror url-metoden vil virke... jeg er næsten ok på side 2 (den loader ikke rigtigt endnu, men der mangler også modifikationer i forhold til den nye måde at læse værdierne på). Jeg havde problemer et øjeblik med at en post back (selected index changed) postede formen og dermed ikke fik mine url parametre med.

Jeg disablede den post pack og nu virker den del.
Avatar billede ladyhawke Novice
02. oktober 2007 - 15:29 #45
btw. url kan godt være et problem hvis den bliver lang (alias mange og/eller lange parametre)
Avatar billede kalp Novice
02. oktober 2007 - 15:49 #46
Den begrænsning du taler om er ved form submit og kun hvis man benytter GET metoden.

Det du laver er ikke GET, men Redirect.
Avatar billede kalp Novice
02. oktober 2007 - 15:50 #47
Begrænsningen med GET er desuden på 255karakter
Avatar billede ladyhawke Novice
02. oktober 2007 - 15:52 #48
fik oplyst at grænsen for IE var 4K (jeg ved godt det er meget, men det er nødvendigt at overveje)
Avatar billede kalp Novice
02. oktober 2007 - 15:57 #49
ladyhawke -> Jeg tvivler seriøst på du får problemer med det:)

Du kan have ekstremt mange variabler i url'en og har svært ved, at tro du nærmer dig den grænse.

Ved selvfølgelig ikke hvad du laver, men tvivler.
Avatar billede ladyhawke Novice
02. oktober 2007 - 16:09 #50
Du har ret, i dette tilfælde skulle det ikke give problemer, derfor fortsætter jeg også ad denne vej... :o) Jeg har 7-8 variable, hvor de længste er guids.

Jeg er nu kommet "vel" ind på side 2 og mine problmer nu er begrænset til opdatering til at benytte url på alle sider (det er en wizard) og lige få den til at opføre sig pænt, når jeg navigerer baglæns.

Læg endelig svar, der har været mange gode og hjælpsomme forslag undervejs og jeg har lært et par tricks jeg ikke kendte før:oD
Avatar billede kalp Novice
02. oktober 2007 - 16:14 #51
Du får mit svar her:)
Avatar billede olebole Juniormester
02. oktober 2007 - 16:32 #52
<ole>

Begrænsningen ved method="get" i en form gælder også URL'er ... det er jo én og samme ting  ;o)

/mvh
</bole>
Avatar billede ladyhawke Novice
02. oktober 2007 - 18:45 #53
noeman>> svar? du kom med gode indlæg også (f.eks. det med Context)
Avatar billede ladyhawke Novice
02. oktober 2007 - 18:56 #54
neoman, sorry
Avatar billede neoman Novice
02. oktober 2007 - 19:14 #55
svar;)
Avatar billede ladyhawke Novice
02. oktober 2007 - 19:26 #56
prøv igen, denne gang med svar :o)
Avatar billede neoman Novice
02. oktober 2007 - 21:59 #57
okaay - prøver igen:)
Avatar billede ladyhawke Novice
03. oktober 2007 - 07:33 #58
Fint, og tak for hjælp og tålmodighed
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