[ASP.NET 2.0] Welke UserControl voor weergeven van object.

Pagina: 1
Acties:

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
Ik ben momenteel druk aan het experimenteren met ASP.NET en loop nu vast. Ik wil op een pagina alle attributen tonen van een business object, ik maak gebruik van een ObjectDataSource om m'n data op te halen. Nu zijn er zover ik weet twee usercontrols om een single object weer te geven en daarbij gebruik te maken van een DataSource, namelijk: de DetailsView en de FormView. Aangezien ik graag de controle heb over de HTML, valt de DetailsView af omdat deze geen templates ondersteunt. De FormView moet ik in een form element plaatsen, wat niet echt de bedoeling is omdat ik puur alleen data wil weergeven.

De code die ik nu gebruik (en die niet werkt omdat de <asp:FormView> in een form tag moet):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Reisverhaal.ascx.cs" Inherits="vakanties_Reisverhaal" %>

<asp:FormView ID="ReisverhaalView" Runat="server" DataSourceID="ReisverhaalDataSource" EnableViewState="false">
<ItemTemplate>
  <h2><%# Eval("Titel") %></h2>
  <p>Dit verhaal loopt van <%# Eval("Van") %> tot <%# Eval("Tot") %>.</p>
  <p><%# Eval("Verhaal") %></p>
</ItemTemplate>
</asp:FormView>

<asp:ObjectDataSource ID="ReisverhaalDataSource" Runat="server" TypeName="PersonalWebsite.ControlTier.ReisverhaalControl" 
    SelectMethod="ReadById">
    <SelectParameters>
        <asp:QueryStringParameter Name="id" Type="Int32" QueryStringField="reisverhaal" />
    </SelectParameters>
</asp:ObjectDataSource>


Mijn zoektocht op google leverde me vooral veel voorbeelden op waar het wel toepasselijk is om een html form te gebruiken. In een voorbeeld applicatie van Microsoft gebruiken ze ook de FormView voor het weergeven van normale data, wat mij niet helemaal de bedoeling lijkt.

Kan iemand mij vertellen wat de beste keuze is voor het weergeven van een enkel business object?

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
je kan een repeater gebruiken

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
Kan, maar dat lijkt me meer een control voor een lijst van objecten. Het repeat effect is namelijk een beetje weg met 1 object.

Ik heb het nu als volgt opgelost, want ik wou toch verder:
code:
1
2
3
4
5
6
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Reisverhaal.ascx.cs" Inherits="vakanties_Reisverhaal" %>
<div id="reisverhaal">
  <h1><asp:Literal id="reisverhaal_Titel" runat="server" /></h1>
  <p class="data_plaats">Van <asp:Literal id="reisverhaal_Van" runat="server" /> tot <asp:Literal id="reisverhaal_Tot" runat="server" /> te <asp:Literal id="reisverhaal_Plaats" runat="server" />.</p>
  <p><asp:Literal id="reisverhaal_Verhaal" runat="server" /></p>
</div>

In de Page_Load functie haal ik nu bij de Control klasse het juiste object op en vul dan de asp:Literal velden in. Werkt opzich prima, alleen met links ben je toch verplicht om een asp:Hyperlink te gebruiken en dat gaat nog niet helemaal zoals ik wil. Een voorbeeld:
code:
1
<asp:HyperLink ID="vakantie_FotoAlbum" runat="server">Bekijk het fotoalbum: </asp:HyperLink>

Twee dingen die hier niet helemaal netjes zijn. Allereerst het plaatsen van de naam van het fotoalbum gebeurd met een += op de Text property van de asp:Hyperlink, niet echt heel boeiend maargoed. Wat ik wel irritant vind is dat er een id in het html veld gegenereerd wordt waar ik niks aan heb.
HTML:
1
<a id="ctl00_ContentPlaceHolder_ctl00_vakantie_FotoAlbum" href="../fotos/Default.aspx?album=1">

Leuk dat id, maar die is natuurlijk nergens voor nodig. Server-side gebruik je dat id alleen om een referentie naar die asp:Hyperlink tag te krijgen, client-side heb ik er niks aan.

Iemand commentaar op het gebruik van asp:Literal tags om een enkel business object weer te geven? Betere opties? Is het ook mogelijk om een id niet in de html te laten genereren, dat het puur alleen gebruikt wordt om naar een server-side tag te refereren?

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
wat ik dan wel eens doe:

maak ik in de codebehind een protected/public property aan van het business object, bijv CurrentBusinessObject.

in de aspx zet ik dan:
code:
1
<%= CurrentBusinessObject.Property %>

of als je meer van databinden houdt gebruik je een # ipv een =, maar dan moet je wel ff nog databind aanroepen op de page.

je hebt dan helemaal geen extra controls nodig

[ Voor 9% gewijzigd door joopst op 13-03-2006 15:40 ]


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10-2025
Zo simpel maar het werkt prima, beter dan m'n huidige opzet! Bedankt. :)

Vervelende van de online voorbeelden is dat ze allemaal denken dat je op iedere pagina een form wilt hebben.

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

of als je meer van databinden houdt gebruik je een # ipv een =, maar dan moet je wel ff nog databind aanroepen op de page.
Die databind zou wel eens goedkoper kunnen zijn :)

oogjes open, snaveltjes dicht

Pagina: 1