webForumDet fria alternativet

kompilerad web user control

.NET

6 svar · 569 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

bara spånar lite nu! :stud
har x antal siter som använder samma web user control.
jag har alltså kopierat över ascx filen och lagt i allas siters webmapp.
om jag sedan gör en ändring i orginalfilen så kopierar jag ut den på nytt.
detta är ju lite halvjobbigt då jag måste kompilera om varje site sedan och ftpa upp till servern!

så går det att göra om min kontroll till en dll-fil istället som jag bara behöver kopiera och lägga i varje sites binmapp sedan så jag slipper kompilera om siterna?

Medlem sedan jan. 20022 440 inlägg
#2

Precis rätt, kanske till och med kan göra en webservice av kontrollen då slipper du ju till och med kopiera dll filen :)

Medlem sedan maj 20012 812 inlägg
#3

Japp det går utmärkt, det du skall leta efter är "ASP.NET Custom Server control" på google så hittar du massor med information...

- M

Medlem sedan juni 20003 076 inlägg
#4

Tack grabbar för tipsen! :bire
Har nu lyckats göra en composite kontroll som innehåller bla. en button och har nu en liten fundering:
Går det att ärva buttonens alla egenskaper på nått sätt, ex text, font, CssClass osv.
eller måste jag göra egna i min kontroll?
Så här ser det ut nu:

public class ContactForm : CompositeControl
{
     private Button sendButton = new Button();

     protected override void CreateChildControls()
     {
          Controls.Add(sendButton);

          base.CreateChildControls();
     }
}
<cc1:ContactForm ID="ContactForm1" runat="server" SendButton-Font-Bold="True" />

Jag antar att denna property måste jag skriva själv eller?

Medlem sedan maj 20012 812 inlägg
#5

Nej, om du vill ärva något så måste du ha den kontrollen som baskontroll så det går inte om du vill göra en compositecontrol. Om du vill göra en egen Button så går det, men du vill ju ha flera kontroller i din kontroll så då går det inte, du får helt enkelt wrappa dem. Det kanske går att lägga din Button som en public properties så kanske du kan komma åt dem enkelt genom:

<cc1:ContactForm ID="ContactForm1" runat="server" Button.FontBold="True" />

- M

Medlem sedan juni 20003 076 inlägg
#6

Oki! :)
En annan fråga:
Var är bäst att lägga "vanlig" htmlkod (jag har sett exempel på båda nämligen), i CreateChildControls() eller i RenderContents()?

protected override void CreateChildControls()
{
     Controls.Add(new LiteralControl("<table border=\"0\">"));
     ...
}
protected override void RenderContents(HtmlTextWriter output)
{
     output.Write("<table border=\"0\">");
     ...
}

Jag tycker att det bör ligga i RenderContents men vill kolla med er för att vara säker! :)

Medlem sedan maj 20012 812 inlägg
#7

Nu har jag inte lagt någon engen HTML-kod, så jag vet faktiskt inte. Men generellt så tycker jag du skall undvika det men om du måste så hade jag wrappat det i en literalControl som du gör i CreateChild-metoden, det känns mest ASP.NET jämfört med att streama ut det direkt i Render-metoden. Men kör på det som passar dig bäst.

- M

254 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)