[.NET Repeater] Element alleen weergeven bij ingelogde user

Pagina: 1
Acties:

  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 24-05 16:17
Hey :)

Ik ben nog niet zo lang met .NET bezig en ik heb het idee dat dit ook een vrij simpel probleem is, maar dat ik het ff over het hoofd zie.

Ik heb een repeater die reacties op een weblog laat zien. Als de eigenaar van het weblog ingelogd is, dan moet bij elke reactie een link weergegeven worden waarmee de reactie verwijderd kan worden.

Nu had ik het volgende al geprobeerd :

Een Hyperlink control opnemen in de repeater en standaard de Visible property op False gezet.

code:
1
<asp:HyperLink ID="lnkDeleteReply" Runat="server" NavigateUrl='ShowBlog.aspx?action=delete&replyId=<%# DataBinder.Eval(Container, "DataItem.Id") %>' Visible="False">verwijderen</asp:HyperLink>


Vervolgens handle ik de OnItemDataBound event en daarin controleer ik of de eigenaar ingelogd is. Zo ja, zoek de betreffende Hyperlink control en set Visible = True. Dat werkte wel, alleen werd het Id niet geparsed, dat stukje tekst van DataBinder.Eval bleef gewoon staan.

Een tweede optie die ik had geprobeerd is door 2 labels op te nemen in de repeater. Label1 bevat het ID van de reply, Label2 bevat de link om het item te verwijderen. Vervolgens weer met die OnItemDataBound event geprobeerd om het zaakje bij elkaar te zoeken en te combineren, maar dan krijg ik in die eventhandler weer het probleem dat de Text property van Label1 leeg is.

Heeft iemand een idee wat ik over het hoofd zie, of verkeerd doe?
Of is er een snellere oplossing om een bepaalde control in een Repeater alleen onder een bepaalde voorwaarde te laten zien?

Ik zie het ff niet meer :?

[ Voor 4% gewijzigd door SilentThunder op 03-06-2004 16:58 . Reden: Shit, per ongeluk 2x het bericht gepost... ]

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 24-05 16:17
Ok, probleem is al opgelost. Heb gewoon een methode gemaakt die kijkt of de user ingelogd is, zo ja, retourneer dan de link "verwijder", anders een lege string.

Die methode heb ik om dat element in de Repeater gezet.

Dat ik daar niet gelijk bij nagedacht had |:( :P

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Omdat je de row weet, kun je die ID ook gewoon met de hand in de OnItemDataBound erin plakken.

Ik gebruik dezelfde techniek om admin acties te hiden/showen in mn forum. De messages worden met een repeater opgebouwd en als een persoon van de admin role de messages ziet dan worden bepaalde opties zichtbaar bij elke message.

Dit heb ik in mn Messages.aspx:
HTML:
1
2
3
4
5
6
7
8
<b><asp:hyperlink NavigateUrl="DeleteMessage.aspx?MessageID=" ID="lnkDeleteMessage" Visible="False" Title="Delete this message" 
Runat="server">Delete</asp:hyperlink></b>
<asp:label ID="lblMessageCmdSepDeleteEdit" Runat="server" Visible="False">|</asp:label>
<b><asp:hyperlink NavigateUrl="EditMessage.aspx?MessageID=" ID="lnkEditMessage" Visible="False" Title="Edit this message" 
Runat="server">Edit</asp:hyperlink></b>
<asp:label ID="lblMessageCmdSepEditQuote" Runat="server" Visible="False">|</asp:label>
<b><asp:hyperlink NavigateUrl="NewMessage.aspx?QuoteMessageID=" ID="lnkNewMessageWQuote" Visible="False" 
Title="Add new message quoting this message" Runat="server">Quote</asp:hyperlink></b>

Zoals je ziet zijn de ID's niet direct gebound.

In de code behind, in de eventhandler van de repeater: (jaja hungarian coding, het is al oud)
C#:
1
2
3
4
5
6
7
8
9
10
11
//...
HyperLink lnkEditMessage = (HyperLink)e.Item.FindControl("lnkEditMessage");
HyperLink lnkDeleteMessage = (HyperLink)e.Item.FindControl("lnkDeleteMessage");
HyperLink lnkNewMessageWQuote = (HyperLink)e.Item.FindControl("lnkNewMessageWQuote");
// get message ID and complete URLs in message
int iMessageID = (int)((DataRowView)e.Item.DataItem)["MessageID"];
lnkEditMessage.NavigateUrl+=iMessageID + "&ThreadID=" + m_iThreadID;
lnkDeleteMessage.NavigateUrl+=iMessageID + "&ThreadID=" + m_iThreadID;
lnkNewMessageWQuote.NavigateUrl+=((DataRowView)e.Item.DataItem)["MessageID"].ToString() + "&ThreadID=" + m_iThreadID;

// right management which shows link objects if applicable

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com