[asp .NET]Skapa <asp:LinkButton> dynamiskt?

Permalänk
Medlem

[asp .NET]Skapa <asp:LinkButton> dynamiskt?

Jo, håller på att lära mig lite asp .NET med C#, men har stött på ett litet problem.

Jag har kodat en enkel gästbok. Har man skrivit i den så skrivs meddelandet ut tillsammans med VEM som skrev texten (man loggar in på sidan). Allt som skrivs i gästboken sparas på fil, och hämtas med hjälp av en funktion som returnerar allt som en String.

Men om jag nu vill göra så att dessa namn som sparas på fil, skall skrivas ut som länkar (text <asp:LinkButton>), hur 17 gör jag då? Vanliga <a href> kan uteslutas (tror jag) då jag vill att när man trycker på dessa länkar så skall en funktion showUser anropas, och göra sin grej. Alltså ungefär så här ser funktionen ut som sparar allt på fil:

public class FIL
{
public void skriv_fil(string namn, string text)
{
String lankNamn = "/*här skrivs alltså koden för länken till namnet/*"

writer.Write("Skrivet av<b> " + lankNamn + "</b> : " + tid + " <br /><br />" + text + "<br /><br /><hr />");
//osv osv...
}
}

Men när jag senare skriver ut detta, så då fattar ju inte webläsaren vad en asp:LinkButton är då det skall köras på servern.

Så hur skall jag tå tillväga?

Tackar på förhand!

Permalänk
Medlem

http://www.w3schools.com/aspnet/control_linkbutton.asp, http://support.microsoft.com/kb/317794

(using System.Web.UI.WebControls) // skapa ett nytt objekt av typen LB LinkButton lb = new LinkButton(); // ge knappen dess egenskaper, t.ex. text, färger, länkning osv. lb.Text = 'Arne'; // placera ut knappen Form1.Controls.Add(lb); // om du vill koppla en händelse får du använda en delegat this.lb.Clicked += new System.EventHandler(this.lb_Clicked); // delegaten pekar på funktionen lb_Clicked: public void lb_Clicked(object sender, System.EventArgs e) { }

Permalänk
Medlem

ohhh nice nice, skall kolla upp det där, synd dock att det inte verkar finnas
enklare sätt

Permalänk
Medlem

Det känns lite som som du skriver nu så är du kvar i classic ASP/PHP. Tanken med .NET är att du ska slippa skriva som du gör.

I ditt fall så bör du lagra datat i exempelvis en XML-fil som du läser in till ett DataSet som du sedan kopplar till en asp:repeater. Jag hinner tyvärr inte ge något exempel just nu.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av manpower
Det känns lite som som du skriver nu så är du kvar i classic ASP/PHP. Tanken med .NET är att du ska slippa skriva som du gör.

I ditt fall så bör du lagra datat i exempelvis en XML-fil som du läser in till ett DataSet som du sedan kopplar till en asp:repeater. Jag hinner tyvärr inte ge något exempel just nu.

När du menar datat, menar du alltså gästboksinläggen?
Grejjen är den att jag precis börjat med C#/ asp. NET, så jag började
med en enkel gästboksfunktion i utbildningssyfte. Senare kom jag på att man skulle kunna klicka på namnen som skrivit inlägget...

Men jag skall kolla upp det där med repeater!

EDIT:

Jamenjahamen. Det där med repeater å xml kändes ju inte så relevant till just detta problem, eller har jag missförstått?

Okej åter till problemet, finns det inget lätt sätt att dynamiskt skapa asp:LinkButton`s ?
Det skulle ju vara skönt om man kunde göra:
Label.Text = "<asp:LinkButton /*sen allt nödvändigt*/></asp:LinkButton>";

Men jag antar att det inte finns ett lätt sätt att lösa detta?

Permalänk
Medlem

Jag håller med manpower. Det känns som om du gör alldeles för mycket onödigt.

Repeater fungerar så gör även en datagrid (eller gridview beroende på version) med bra definierade kolumner.

Denna artikel är ganska enkel: http://www.codeproject.com/aspnet/UserInfo.asp

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MickeBoy
Jag håller med manpower. Det känns som om du gör alldeles för mycket onödigt.

Repeater fungerar så gör även en datagrid (eller gridview beroende på version) med bra definierade kolumner.

Denna artikel är ganska enkel: http://www.codeproject.com/aspnet/UserInfo.asp

Det kan hända att ni har missuppfattat mig lite, just det här med
gästboken har jag inga problem med, jag har en väl fungerande sådan, MEN jag klarar inte att göra namnen klickbara med asp:Linkbutton...
Visst, att göra dem klickbara med vanliga a href är ju inga problem, men då kan jag inte ropa på en funktion som jag vill göra.

azoapes är inne på rätt spår, men det känns som en krånglig/avancerad lösning att implementera i just mitt problem.

Jag omformulerar frågan lite:

Finns det ett enkelt sätt att dynamiskt skapa länkar som klarar av att ropa
på funktioner?

Ex:

Label1.Text = "/*kod till en länk som klarar av att ropa på funktioner*/";

senare på sidan skriver jag ut Label1 med:

<asp:label id=Label1' runat='server'/>

vilket får resultatet av en klickbar länk i webläsaren som ÄVEN klarar av
att ropa på funktioner.

Finns det liknande sätt eller är det bara att bita i det sura äpplet och sätta mig in i azoapes tips?

Permalänk
Medlem

Jag förstår inte riktigt att du tycker det är avancerat... att skapa ett objekt av typen LinkButton är ju lika enkelt som att deklarera en int... det sista jag skrev om delegaten är bara om du vill använda code-behind-kod kopplat till knappen, men det räcker väl med en vanlig länk i ditt fall?

Permalänk
Medlem

Anledningen till att jag tycker du ska använda en repeater är att du enkelt kan koppla en linkbutton till varje inlägg då.

<asp:repeater id="repeater1" runat="server"> <itemtemplate> <%# DataBinder.Eval(Container.DataItem, "gbinlagg") %> <asp:linkbutton id="btnName" onclick="btnName_Click" commandargument='<%# DataBinder.Eval(Container.DataItem, "gbnamn") %>' runat="server"> <%# DataBinder.Eval(Container.DataItem, "gbnamn") %> </asp:linkbutton> </itemtemplate> </asp:repeater> // sen i codebehind så tar du hand om clicket genom exempelvis protected void btnName_Click(object sender, EventArgs e) { string name = ((Linkbutton)sender).CommandArgument; // Gör det du vill med namnet }

Så blir själv utskriften, sen måste du självklart koppla datat till datarepeater, men har inte riktigt tid att visa det.

Vill du inte göra på det här viset så bör du göra som personen som svarade dig först visade.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av azoapes
Jag förstår inte riktigt att du tycker det är avancerat... att skapa ett objekt av typen LinkButton är ju lika enkelt som att deklarera en int... det sista jag skrev om delegaten är bara om du vill använda code-behind-kod kopplat till knappen, men det räcker väl med en vanlig länk i ditt fall?

Ajo att skapa LinkButton är ju ingen sak att göra, men att göra det dynamiskt, i detta fall, att skapa dem i en gästbok där jag inte vet hur många knappar som kommer att behövas, är svårt och helt nytt för mig :).

Men jag tror att jag har missuppfattat er och ursäktar mig för det.
Nu skall jag ta en riktig genomkörare av bl.a repeater, tack för hjälpen swecare!

MVH // Björn A

Permalänk
Medlem

Vi menar inget illa med våra kommentarer, när jag ser sånna här inlägg så känner jag igen mig själv när jag började koda C#/.NET. Kändes lite som "vad är det som är så bra med det här??". Sen när jag lärde mig hantera datasets/datasources och koppla ihop det med webcontroller så som asp:repeater/datagrid etc så var det som en uppenbarelse. I webbutveckling så är det helt klart en av de stora styrkorna med .NET.

Nu vet jag inte hur du lagrar dina gästboksinlägg. Är det mha av xml eller en databas så är det en walk in the park att koppla ihop det med en repeater. Tror inte det är så mycket mer avancerat med en flatfile, men har aldrig provat det själv. Får du in datat i en DataTable/DataSet så är nästan hela jobbet gjort.

Lycka till!

Permalänk
Medlem

Hehe, nejdå, jag förstår att ni inte menade illa :). Saken var väl kanske mer att jag trodde jag gjorde er ledsna pga jag "viftade bort" era tips som jag inte trodde var relevanta.

Men hur som haver, jag tackar för era finfina tips och drar mig tillbaka under jorden.

MVH // Björn A

Permalänk
Medlem

När man känner att man fastnar lite kan det vara bra att kolla exempel på hur objekt används... eftersom .NET-ramverket är så grymt stort är det lätt att se ett exempel och tänka: "Jag känner inte igen ett skit av det där", men då får man börja med det översta objektet som man inte är 100 på och kolla på exempel på bara det, sedan jobba sig nedåt! GL