Hur kan man använda functioner i ascx som finns i aspx-filen?
test.aspx
-------------------------
<script runat=server>
Sub Page_Load(Sender As Object, E As EventArgs)
Dim kontroll1 as control = Page.Loadcontrol("menu.ascx")
test.controls.add(kontroll1)
End Sub
public function ins(x as string)
ins = replace(x, "a", "b")
end function
</script>
<asp:placeholder id="test" runat=server />
menu.ascx
------------------------
<%=ins("a")%>
Detta funkar ju inte. Måste man använda #include (som i gammal asp) för att få det att funka?
Problemet med det är ju att man måste inkludera flera inkluderingsfiler per sida då jag använder flera ascx-filer per sida.
Nehedu, du ska inte göra som i gamla asp. :) Det finns flera sätt att lösa det på beroende på hur du arbetar och vad du vill göra. Försök att bygga upp egna klasser och funktioner utanför dina aspx-sidor, åtminstone om det är funktionalitet du använder ofta. Du använder accessors (get och set) för att hämta och sätta värden mellan klasser.
Ok. Testar just nu olika sätt. Jag har en funktion som ligger i en funktionsfil som heter include.ascx.
Om jag vill att den ska kunna fungera på samtliga mina ascx-filer så borde det väl vara lättast att få med den i min index.aspx-fil. Jag använder alltså bara en aspx-fil just nu (index.aspx).
Därifrån laddar jag flera ascx-kontroller för olika sidor. Funktionerna använder jag dock på nästan alla sidor.
Nja, om du använder en funktion om och om igen så är det mycket bättre att du gör en egen klass innehållande den funktionen. Det är här du ska tänka objektorienterat. Vad är det för funktion du vill köra, vad gör den? Returnerar den något? Släng gärna med lite kod hur du har tänkt dig det hela, lättare att svara då!
Ok. Vi tar en funktion som helt enkelt tar bort tecken ut formulär som inte ska vara där.
function ins(x as string)
ins = replace(x, """", "")
ins = replace(x, "'", "")
end function
Det funkar ju genom att köra en #include men jag vill använda .NET till fullo. Jag har en aspx-fil med kanske 3-5 kopplade kontroller som ascx-filer. Vad jag vill är att den funktionen ska kunna fungera i samtliga ascx-filer utan att behöva köra allt för mycket kod i varje ascx-fil. Bara importera en uppsättning funktioner och subbar till varje ascx-fil. Ungefär som att köra en #include alltså.
Ok, detta är ju en typisk funktion som du antagligen kommer att använda om och om igen. Den här typen av funktionalitet ska du alltid försöka lyfta ur från dina sidor helt och hållet. Skapa en egen klass för strängformateringar (eller kanske tom ett eget namespace där en klass för strängformateringar ingår). En av de stora fördelarna med att ha ett riktigt OO programmeringsspråk i botten är ju att du på ett enkelt sätt slipper ha kod som gör samma sak på flera ställen, detta är guld värt vid uppdateringar, buggfixar, felsökning etc.
Alltså, skapa en vb-fil med din klass, koden kompilerar du sedan till en dll, sedan importerar du assemblyn på de sidor där du ska använda klassen och dess metoder. Exakt hur du gör detta utan vs.net och codebehind har jag glömt bort, man blir lite skadad av att ha ett bra verktyg som sköter allt tråkigt... :) Men det finns flera trådar som tar upp detta här på wf... om du ändå inte får det att fungera så får du fråga igen så får vi försöka hjälpas åt.
//Exempel
namespace myNamespace
{
public class StringFormat {
public string ReplaceSomeCharacters (string myString) {
myString = myString.Replace("a","b");
return myString;
}
}
}
Fråga:
Vad blir det för skillnad på om man gör ett namespace där stränghantering ligger i en klass mot om man gör det i en vb fil (som man gör om till dll). Vad finns det att tjäna ?
Fråga:
Vad blir det för skillnad på om man gör ett namespace där stränghantering ligger i en klass mot om man gör det i en vb fil (som man gör om till dll). Vad finns det att tjäna ?
Ett namespace är egentligen bara en referens till en eller flera klasser, ett sätt stt strukturera upp dina klasser på ett bra sätt helt enkelt. Om du har ett namespace så kan du även referera till denna genom att deklarera det med using myNameSpace; (eller import i vb) så du slipper skriva hela "referensvägen" till klassen varje gång du ska använda den. Du tjänar struktur, helt enkelt... inte prestanda.
I c# (antagligen samma i vb) så måste alla klasser ingå i ett namespace, skillnaden blir alltså att istället för att ha klassen i ditt namespace för din applikation som du arbetar med för tillfället så skapar du ett eget namespace som då blir lättare att återanvända för alla dina applikationer! Annars måste du ju inkludera hela den nuvarande applikationen du arbetar med om du skulle vilja använda funktionen på en annan webbapp.
Därför slår jag ett slag för alla som arbetar i .NET att skapa ett eget namespace där du samlar alla dina klasser som du använder återkommande över flera projekt, exempelvis vanliga stänghanteringar, databaskopplingar och sådant som du kan ha nytta av i många sammanhang.
Ok. Och hur anropar jag denna sedan på bästa sätt?
Inkludera som namespace samt hur skriver jag bäst i response.write(funktionen(värde)) ?
Alltså, skapa en vb-fil med din klass, koden kompilerar du sedan till en dll, sedan importerar du assemblyn på de sidor där du ska använda klassen och dess metoder
importera assembly?... hmm hur gör man allt detta om man inte har fördelen att ha vs.net
136 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe