13. oktober 2006 - 10:58Der er
12 kommentarer og 1 løsning
Kalde UserControl#1's metode fra UserControl#2
Problematikken består i at jeg ønsker at opdatere UserControl#1 fra en anden - UserControl#2 ved at kalde en metode på UserControl#1. Denne metode skal blot reloade kontrollens data.
Jeg har prøvet at benytte mig af følgende: ------------- ... // refresh control: MyControl1 c1 = (MyControl1)Page.FindControl("ucMyControl1"); c1.RefreshControl(); --------------
Begge ASCX filer ligger i samme namespace:
namespace Modules.Web { ... }
- men jeg kan ikke rigtig tilgå dem igennem dette namespace.
NB. Bruger VS 2005
håber der er en der kan hjælpe, da jeg skal bruge det her og nu.
jamen det lader jo til at funge'. Men snepnet, kan du svare mig på hvorfor jeg ikke kan tilgå UserControl#1 inde fra UserControl#2's codebehind - til trods for at de indgår i samme namespace.
Siden med de 2 UserControls - ASPX-delen) -----------------------------
public partial class UserControl2 : System.Web.UI.UserControl {
protected void Page_Load(object sender, EventArgs e) { // bør jeg så ikke kunne tilgå den i form af: UserControl1 ctrl = (UserControl1 )Page.FindControl("ucControl1"); ctrl.UpdateUI();
} } } -----------------------------
Det bør jo virke men det gør det ikke - kan slet ikke tilgå "UserControl1" klassen fra UserControl2 - er det namespacet der er problemet eller ??
Du kan godt tilgå den, hvis du laver et register directive i aspx'en - f.eks: <%@ Register Src="UC1.ascx" TagName="UC1" TagPrefix="uc1" %> Så kan du tilgå den som du har skrevet, men det er sjældent anbefalelsesværdigt. Mvh
Det havde jeg allerede lavet - for at tilføje dem på min aspx-side. Men det gør jo ikke at jeg rent faktisk også kan tilgå dem længere nede i hierarkiet på mine andre usercontrols.
Rent faktisk virker ovenstående kode (men vs intellisense fanger den bare ikke), hvilket jeg dog helst ville have fikset.
Alternativt kunne jeg jo vælge at typecaste til min webform klasse (aspx'en) og så kalde kontrollen via en public accessor:
Du kan sætte et register directive ind på selve den usercontrol hvor du vil programmere op imod en anden. F.eks. sætte et uc1 directive ind i din uc2.ascx fil. Og nej - det har ikke noget med performance at gøre, men hvis en usercontrol skal kunne fungere som en selvstændig enhed, er det ikke hensigtsmæssigt at den er afhængig af en anden usercontrol den skal slå op via siden. Den slags bør laves på en anden måde. Afhængigheder mellem kontroller kan du sagtens lave - det er bare hensigtsmæssigt at abstrahere afhængigheden i f.eks. et interface ell. Mvh
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.