Avatar billede speedy Nybegynder
19. juni 2009 - 10:38 Der er 10 kommentarer og
1 løsning

Variabel i initialisering af usercontrol

Hejsa

Jeg kan ikke forstå at jeg ikke kan sætte initialiserings-værdier på en usercontrol til en variabel som jeg sætter acceptUrl herunder.

<%
    string acceptUrl = String.Format("{0}/accept", urlPrefix);
%>
<UserControls:MyUserControl runat="server" ID="MyUserControl1" acceptUrl="<%=acceptUrl %>" />

Er der ikke en måde man kan sætte acceptUrl til en variabel ude i mit view?
Avatar billede aaberg Nybegynder
19. juni 2009 - 12:26 #1
Er det ikke nemmere at gøre i kodefilen?

protected void Page_Load(object sender, EventArgs e)
{
    MyUserControl1.acceptUrl = acceptUrl;
}
Avatar billede aaberg Nybegynder
19. juni 2009 - 12:31 #2
Ellers kan du godt gøre det i din markup. Da skal du gøre spådan:

<%
    string acceptUrl = String.Format("{0}/accept", urlPrefix);
%>
<UserControls:MyUserControl runat="server" ID="MyUserControl1" acceptUrl="<% Response.Write(acceptUrl) %>" />
Avatar billede aaberg Nybegynder
19. juni 2009 - 12:32 #3
Whoops, mangler et semikolon. Sådan skal det være:

<%
    string acceptUrl = String.Format("{0}/accept", urlPrefix);
%>
<UserControls:MyUserControl runat="server" ID="MyUserControl1" acceptUrl="<% Response.Write(acceptUrl); %>" />
Avatar billede speedy Nybegynder
19. juni 2009 - 13:09 #4
problemet er bare at det er forskelligt hvordan den skal "finde ud af" hvad acceptUrl er, afhængig af hvilket view der viser den. Så derfor vil jeg helst have det i viewet.

Dit eksempel virker ikke - det er nøjagtig det samme som jeg gør..

<%=acceptUrl %>  er jo det samme som
<% Response.Write(acceptUrl); %>
Avatar billede aaberg Nybegynder
19. juni 2009 - 13:25 #5
Hmm, nu har jeg også lært noget i dag!

Det eneste jeg kan se som muligvis kan give en fejl, er hvis den ikke kender urlPrefix variablen i det acceptUrl bliver sat.

Hvilken fejlmeddelelse får du? Er det en runtime fejl eller en compiletime fejl?
Avatar billede speedy Nybegynder
19. juni 2009 - 13:34 #6
Jeg får ikke en decideret fejl - Indholdet af acceptUrl inde i min usercontrol er simpelthen følgende streng:

<% Response.Write(acceptUrl) %>

og ikke indholdet af acceptUrl.

Så det ser desværre ud som om man ikke kan give dynamisk indhold til en usercontrol igennem viewet :/
Avatar billede aaberg Nybegynder
19. juni 2009 - 14:08 #7
Nu undersøgte jeg det lidt, og det er ikke muligt at bruge <% %> inde i en server-tag.

Men måske du kan gøre det sådan her i stedet for:

<% string acceptUrl = String.Format("{0}/accept", urlPrefix); %>

<% MyUserControl1.acceptUrl=acceptUrl; %>
<UserControls:MyUserControl runat="server" ID="MyUserControl1" />
Avatar billede speedy Nybegynder
19. juni 2009 - 14:55 #8
Den løsning har jeg desværre også prøvet, men desværre bliver min usercontrols onLoad kaldt før acceptUrl bliver sat, og det er allerede i onLoad jeg skal bruge den :)

Det kan godt være jeg skal finde en helt anden løsning.
Avatar billede aaberg Nybegynder
19. juni 2009 - 15:23 #9
Kan du ikke sætte den i codebehind filerne for hver UserControl?

Hvis jeg forstår din problemstilling korrekt, så ville jeg have lavet en BaseControl for alle de UserControls der skal bruges. På denne BaseControl skal der være en property som hedder AcceptUrl. Alle de UserControls du skal loade ind i din side, skal nedarve fra BaseControl i stedet for UserControl. I codebehind filen for hver UserControl, i OnInit eventet, sættes AcceptUrl propertien.

På denne måde vil du altid have den til rådighed fra din Page, når den kommer til OnLoad eventet.

Gav det mening?
Avatar billede speedy Nybegynder
19. juni 2009 - 15:27 #10
Jeg har lavet noget lignende, og jeg gider ikke bruge mere energi på at lave noget smartere nu...

Tak for mange gode inputs - læg et svar, så får du point.
Avatar billede aaberg Nybegynder
19. juni 2009 - 15:58 #11
tak for det :-)
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

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