Artiklar » .NET » asp:Panel och asp:Placeholder

 
 

asp:Panel och asp:Placeholder

Författare: mactommy
Datum: den 18 mars 2009
Antal lästa: 4158
Stjärnmärkt

Då var det dags för att ta sig en titt på kontrollerna <asp:Panel> och <asp:PlaceHolder>.

Starta ett nytt projekt och lägg ut dessa två kontroller på din sida, Kod:
<form id="form1" runat="server">
  <div>
    <asp:PlaceHolder ID="PlaceHolder1" runat="server">Placeholder</asp:PlaceHolder>
    <asp:Panel ID="Panel1" runat="server">Panel</asp:Panel>
  </div>
</form>

Jag har här lagt till texterna "Placeholder" och "Panel" i taggarna för att vi ska se vad som sker HTML mässigt med kontrollerna. Kör projektet och kolla på den genererade HTML-koden.
Återigen så har vi två kontroller där ena genererar HTML-kod och den andra levererar en "ren" kontroll utan inblandning av andra HTML-element.

Vad kan man använda dessa två kontroller till?
Jag brukar använda dessa till att gruppera olika stycken i koden och för att snabbt och enkelt kunna dölja delar enkelt med propretyn visible="true". Eftersom <asp:Panel> omslutes av en <div> så har vi möjlighet att använda CssClass och t.ex. BorderWidth. Återigen så ger "borderwidth" ett style attribute på HTML-taggen, som vi helst vill undvika i våran generade HTML-kod. PlaceHoldern är som <asp:Literal> utan HTML-element och utan möjlighet till CssClass.

När vi tittade på <asp:Label> och <asp:Literal> så hade vi propertyn "text" för snabbt fylla kontrollerna med text, denna möjlighet har vi inte här. I kontrollerna är vi "tvugna" att skriva in våran text statistik och då ev. komplettera med ytterligare någon kontroll om vi vill ha en del i våran statiska text mer dynamisk. T.ex. i ett massutskickat brev,
<asp:PlaceHolder ID="PlaceHolder1" runat="server">Hej <asp:Literal ID="Literal1" runat="server"></asp:Literal>, du har vunnit $10.000.000, genom att du skickar in ditt namn, adress, kontonr och 1000$ i kontanter för administrativa kostnader så sätts pengarna in på ditt konto inom en vecka.</asp:PlaceHolder>

Vi har en statisk text och vi har möjlighet med våran literal att byta ut namnet. Vill vi att bara några ska se detta "brev" så döljer vi hela placeholdern med visible="false".

Vill vi ha ett fält som antingen kan vara en text eller en länk så kan vi lägga till denna dynamiskt ifrån CodeBehind, utan att placera ut en <asp:Literal> och en <asp:Hyperlink> i våran kontroll och som vi då döljer med propertyn visible="false" beroende på vad som ska visas.

Lägg ut en kontroll <asp:Placeholder> och gå till default.aspx.cs. Nu lägger vi till en text från CodeBehind, Kod:
Literal myLiteral = new Literal();
myLiteral.Text = "Nu har vi skapat en Literal-kontroll CB som vi senare lägger i våran placeholder.";
PlaceHolder1.Controls.Add(myLiteral);

Kör koden och titta på resultatet. Det finns andra sätt, men nu visar jag med en enkel kontroll - en enkel metod.

Nu tar vi och lägger till en länk och då använder vi en HyperLink-kontroll, Kod:
Hyperlink myLink = new HyperLink();
myLink.NavigateUrl = "http://www.aspsidan.se ";
myLink.Text = "aspsidan.se";
PlaceHolder1.Controls.Add(myLink);

Kör koden på nytt och se resultatet.

Om ni tog bort "Literal" och ersatte med "HyperLink" så kan ni göra ett försök att lägga till båda kontrollerna i samma <asp:PlaceHolder>, Kod:
Literal myLiteral = new Literal();
myLiteral.Text = "Nu har vi skapat en Literal-kontroll CB som vi senare lägger i våran placeholder.";
PlaceHolder1.Controls.Add(myLiteral);
Hyperlink myLink = new HyperLink();
myLink.NavigateUrl = "http://www.aspsidan.se ";
myLink.Text = "aspsidan.se";
PlaceHolder1.Controls.Add(myLink);

När vi kör våran kod så kommer "Literal" hamna först eftersom det är den vi la dit först och sen kommer länken. Hade vi en text innan så kommer våran text och länk att lägga till sig efter den texten.

Genom PlaceHoler1.Controls.Add() så kan man skapa <ul>-listor från CB genom att skapa en ny literal för varje tagg med HTML-elementet och addera in den i våran placeholder. Möjligheten finns och man får total kontroll över den genererade HTML-koden, dock så blir det väldigt mycket knapprande.

Det sista som jag tänkte visa är om man nu har skrivit in en statisk text som enbart ska synas för t.ex. inloggade och när en besökare kommer in på sidan så ska den mötas av skylten "Endast för medlemmars ögon...". Vi skulle kunna lägga en PlaceHolder på sidan med vår statiska medlemstext och tillsammans med den en literal, där vi anger texten som en icke inloggad ska mötas av. Med hjälp av propertyn "visible" så döljer vi dessa beroende på status på inloggad eller ej från codebehind.

Vi kan även lägga ut våran placeholder och om personen inte är inloggad så tömmer vi kontrollen och ersätter den med en ny "Literal", Kod:
bool isMember = false;
if(!isMember)
{
  Placeholder1.Controls.Clear();
  Literal myLiteral = new Literal();
  myLiteral.Text = "Endast för medlemmars ögon...";
  PlaceHolder1.Controls.Add(myLiteral);
}


Denna artikel är enbart till för att ge er en liten mer inblick av kontrollerna, det finns både bättre och sämre sätt att lösa saker och ting på. Men... förhoppningsvis ger denna en liten inblick i hur dessa ev. skulle kunna användas. När ni pillar med kontrollerna så kan ni undersöka vidare de olika propertys som man kan ge.
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0625 sekunder att ladda sidan