Avatar billede ultik Nybegynder
27. december 2002 - 22:42 Der er 5 kommentarer og
1 løsning

Controls inden i Repeaters

Hvordan håndterer man subjekt?

f.eks.

<asp:Repeater id="SjovListe" runat="server">
  <ItemTemplate>
    <asp:Textbox Text="<%# Databinder.Eval(Container.DataItem, "something") %>">
  </ItemTemplate>
</asp:Repeater>

Her vil jeg så gerne kunne accese'e hver eneste textbox... Hvordan gør jeg det?

Og så en lille ting der generer mig ved .NET. Jeg har endnu ikke regnet ud hvordan jeg skal lave noget lignende dette asp-kode:

<% if something then %>
  <html-her />
<% end if %>

Inde i f.eks. en repeater... Jeg kan lave det med <%# InsertHTML(en,hulens,masse,argumenter) %>

Men det holder jo absolut ikke, hvis f.eks. det html-stykke jeg vil vise skal bruge hele 17 Databinder.Eval(Container.Item, "stuff") til at bestemme hvordan det ser ud.. Derudover er det "grimt" ;) og det er heller ikke helt optimalt at meget af html-koden så kommer ind i en funktion i strenge, hvis folk der ikke kan ASP.NET skal kigge på designet...

Jeg har en ide om at jeg måske kan lave en custom webcontrol til det... noget ala:

<mitlib:Conditional Evaluate="MinEvalFunktion" runat="server">
  <IfTrue>
    <html-her/>
  </IfTrue>

  <IfFalse>
    <html-her/>
  </IfFalse>
</mitlib>

Hvor "MinEvalFunktion" så skal være en funktion der returnerer boolean, og komponenten så Renderes med den blok der svarer til resultatet... Findes sådan en komponent i forvejen? Er der en bedre måde at gøre det på?

Jeg bruger selv C#, men jeg kan også læse VB hvis det er nemmere for jer at vise det der :)
Avatar billede simon.ulsnes Nybegynder
28. december 2002 - 12:13 #1
Hmmm... Jeg tror, at den fejl du gør er at centrere det hele omkring selve .aspx-filen i stedet for en CodeBehind-fil, hvor du jo kan bruge Response.Write("html her") eller EnPlaceHolderEllerPanelEllerWhatever.Controls.Add(new LiteralControl("html her")).

Dine tekstbokse i Repeateren:
DinRepeater.Items[Nummer].Hurlumhej();

Nummer kan være alt mellem 0 og DinRepeater.Items.Count, hvis du forstår.

// Simon
Avatar billede ultik Nybegynder
28. december 2002 - 23:23 #2
Tak med hensyn til Items-collectionen, lige det jeg skulle bruge. (har dog ikke testet det endnu)

Med hensyn til det andet punkt... Well, det er vel ligemeget om jeg holder koden i en codebehind-fil, eller selve aspx-filen (omend jeg holder koden i en codebehind).. men det er netop grunden til at jeg vil undgå literalcontrols og response.write... Jeg vil holde HTML og kode så meget adskilt så muligt, så hvis jeg skal lave en designmæssig ændring, skal jeg kunne gøre det uden mere end basalt kendskab til asp.net-koden... Det er nemlig ofte tilfældet at andre skal arbejde på html'en i de sider jeg laver, og det er ikke altid at de har ligemeget basis for at kunne gennemskue en response.write... Derfor vil jeg gerne have den der conditional-ting... Jeg kunne måske bruge en panel og lave noget hide, men det betyder at jeg får ting med jeg ikke er vilde med, f.eks. <div>-tags.. i realiteten kan det gå hen og blive ligemeget, men jeg vil gerne kunne undgå det... Jeg er heller ikke vild med det ekstra-html en DataList indsætter, men vil gerne have dens EditItem-feature frem for en simpel Repeater.. For at tage et praktisk eksempel kan vi kigge på en side der har en indbygget admin-funktion... F.eks. mit filmsite (som jeg benytter som forsøg på at lære .NET)...  Her har jeg f.eks. at hvis jeg er logget ind vil jeg kunne klikke på en film og få en redigerings-box op... Men hvis jeg ikke er logget ind og klikker på filmen, vil jeg gerne bare se filmens detaljer.. Sådan virker det nu, i Classic-ASP, og det er simpelt at lave fordi man kan lave iterationer over html-blokke, og bruge conditional indsætning... Det er selvfølgelig også simpelt nok hvis jeg vil bruge response.write, men jeg kan ikke lide det, da det giver mig alt for meget af html-koden i .NET-koden, og jeg vil som sagt gerne holde det adskilt.... det nuværende filmsite kan ses på www.minefilm.tk hvis det hjælper... Hvordan bør man gøre dette i .NET?
Avatar billede cms Nybegynder
28. december 2002 - 23:35 #3
Hvorfor gør du ikke blot sådan her:

<asp:Label Id="Lbl" runat="server">
  Coool nok!
</asp:Label>

Så kan du sætte dens visibility med fx:

Lbl.Visible = false;

i din Page_Load.
Avatar billede simon.ulsnes Nybegynder
29. december 2002 - 01:20 #4
En PlaceHolder laver ikke nogen ekstra ting, hvilket er forskellEN fra PlaceHolder til Panel...

Hvis du vil have det sådan, tror jeg ikke at (ASP).NET er den rigtige teknologi at bruge. En af fordelene/ulemperne ved ASP.NET er jo netop at man næsten ikke skal skrive noget HTML-kode, næsten kun C#/VB.NET/whatever-kode.

Men ellers er en webcontrol eller to nok den rigtige løsning...

// Simon
Avatar billede ultik Nybegynder
29. december 2002 - 01:56 #5
simon: Det er jo ikke helt rigtigt, man slipper ikke helt for HTML, omend man med web-controls kan komme langt uden det. Min filosofi er bare at holde alting så meget adskilt som muligt.. Hvis jeg laver en web-control vil jeg selvfølgelig nok blive nødt til at have html i koden, men det er også iorden, det er bare sådan at jeg for det meste undgår det, og det BØR altså kunne lade sig gøre. Jeg vil prøve med en placeholder. Takker for hjælpen.
Avatar billede simon.ulsnes Nybegynder
29. december 2002 - 12:35 #6
Jeg citerer: "næsten" :-)
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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