Hej! Anna, Hej JOhan! Jag håller med Johan om lösning. När din pageklass är laddad så har du ju redan skapat kontrollträdet och då är det ju lite onödigt att trixa med attribut på usercontrol taggen. Verkar som ett tecken på feldesign... Varför inte sätta den från pageklassen med kod istället? Hej! Skriv gärna och berätta hur det går. Jag har lite förslag på kod om du fastnar... Hej! Anna, Hej Johan! Anna, Hej! Anna, Johan: Fredrik, Sätta variabler i User controls
Jag skickar med en parameter i urlen till en av mina sidor. Detta värde fångar jag upp och lägger i en public variabel i .vb-filen (vi kan kalla den myVar).
Jag vill sedan använda värdet i denna publika variabel (myVar) att sätta värdet på en variabel i min usercontrol med. Låter krångligt, så här menar jag:
<MENUCONTROL:MENU id="Menu" runat="server" varPage="variabelvärde"></MENUCONTROL:MENU>
Där varPage nu får det statiska "variabelvärde" vill jag istället ha in värdet av myVar.
Hur ser syntaxen för detta ut? Får inte till det...
Mvh,
/AnnaSv: Sätta variabler i User controls
Hej,
Det enda du behöver göra är att sätta en publik property eller variabel i din user control.
Antingen i Script block eller i Code Behind.
Publik variabel är dock inte att föredra pga en rad olika skäl. Hinner inte ta upp dem just nu, men vill du veta så säg till.
Här fäljer exempel på en property:
<code>
Public Property Prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return PropertyValue
End Get
Set(ByVal Value As String)
' The Set property procedure is called when the value
' of a property is modified.
' The value to be assigned is passed in the argument to Set.
PropertyValue = Value
End Set
End Property
</code>
Sedan anropar du den så som du vill med ovan exempel typ:
<**:UserConteol Prop1="värde" />
Mvh JohanSv: Sätta variabler i User controls
Jag tror du missförstod min fråga lite.
Det jag menade att fråga var hur jag byter ut det nu statiska värdet av varPage nedan till värdet av en variabel. Se koden:
<MENUCONTROL:MENU id="Menu" runat="server" varPage="variabelvärde"></MENUCONTROL:MENU>
Har provat <MENUCONTROL:MENU id="Menu" runat="server" varPage=<%myVar%>>
där myVar är variabeln som innehåller värdet jag vill skicka med men så enkelt var det inte.
Mvh, AnnaSv: Sätta variabler i User controls
Varför inte din lösning med <% %> (inline) kod fungerar (en väldigt vanlig fråga) beror på asp.net arkitekturen. Jag har skrivit en artikel om detta på http://www.pellesoft.se/area/articles/article.aspx?artid=837&sum=0.
Lycka till!
/MickeSv: Sätta variabler i User controls
Efter att ha läst ditt svar förstår jag att jag missförstod Johan svar... (hade nog lite för bråttom).
Det verkar bli en bra lösning ni föreslår!
Ska även läsa din artikel du hänvisar till.
Tack för hjälpen!
Mvh,
AnnaSv: Sätta variabler i User controls
mvh
MikaelSv: Sätta variabler i User controls
Problemet landar åter igen i det jag egentligen frågade om från början (sen att man fick massa andra tips och trix på vägen är en bonus).
När jag ska sätta propertien mha föreslagen kod
<**:UserConteol Prop1="värde" >
så vet jag ju fortfarande inte hur syntaxen ser ut för att istället för statiska "värde", använda värdet av en variabel. Det var ju här jag ville använda inline-kod, som jag nu vet inte fungerar.
Mvh, ANnaSv: Sätta variabler i User controls
Du kan sätta det statiska värdet i din CodeBehind om du kör med den arkitekturen.
Din control nås med det ID du satte så i Page_Load kan du exempelvis skriva:
MinControl.Prop1 = myValue <-- som är en variabel med data från exempelvis en querystring eller databas.
Detta är att rekomendera än att köra bindingar i html sidan. För att lösa det på det sätt du önskar
så anger du bara <%# myValue %> Där myValue måste vara en publik variabel för din sida.
Är nyfiken om du kör med Code Behind eller inline kode (scritp block i html sidan.)
Mvh JohanSv: Sätta variabler i User controls
Nu fungerar inte mycket, vet inte om jag missförstår dig men jag får felmeddelande när jag försöker göra som du föreslår.
Jag jobbar så länge vidare med min publika variabel istället för property tills jag löst problemet med att få över ett värde.
Jag har på htmlsidan följande:
<%@ register TagPrefix="MenuControl" TagName="Menu" src="MenuControl.ascx"%>
Där kontrollen ska vara finns följande kod:
<MENUCONTROL:MENU id="Menu" runat="server" height="160">
</MENUCONTROL:MENU>
I codeBehind försöker jag göra som du föreslår:
OpenPage = Request.QueryString("ParamPage").ToString 'Detta värdet vill jag få över till min control
menu.CurrentPage = OpenPage 'där CurrentPage är en publik variabel i min control
Här får jag dock meddelandet "Name Menu is not declared".
Var har jag missuppfattat dig?
Stort tack för Din hjälp!
/ANna Sv: Sätta variabler i User controls
Det är rätt, men kolla högre upp i din codebehind om du har menu deklarerad. Om man i html sidan lägger till en kontroll, behöver man "tyvärr" oftast trycka på Design fliken för att Vs .net automatiskt skall deklarera kontrollen. (detta kommer man slippa i VS .Net 2005 som ser rätt annorlunda ut. alltså .Net 2.0.)
Mvh JohanSv: Sätta variabler i User controls
Jag har ju deklarerat den i html-delen?
<%@ register TagPrefix="MenuControl" TagName="Menu" src="MenuControl.ascx"%>
Behöver jag deklarera den även i codebehind alltså?
/AnnaSv: Sätta variabler i User controls
Nja, den skall bli deklarerad där med automatik, men blir den inte det så är svaret jag.
Det blir då typ.
Dim menu As <namespace>.class
Mvh JohanSv: Sätta variabler i User controls
"Nja, den skall bli deklarerad där med automatik"
I "gamla" VS.NET (2002 i alla fall) så får du ingen variabel deklarerad när du använder egna UserControl.s. Dessa måste alltid skrivas dit manuellt. Om inte så är det mitt VS som är kek... :)Sv: Sätta variabler i User controls
Jag kör 2003, men blev faktikst osäker om den lades dit automatiskt oxå. Lekt lite med 200 5och där gör den det om jag inte minns fel, var ett tagsedan jag byggde usercontrols eller customcontrols, suttit en del med BOL och DAL bitar den senaste tiden.
Dock är IDet mkt mer avancerat och till en massa fördelar i 2005an, så det skall bli riktigt kul när den kommer i en skarp version, måste bara ha System Team versionen. :-)
Tack för att du fyllde i.
Mvh Johan