SnakesMedlem sedan okt. 2004392 inlägg Tjenare!
Först vill jag bara säga att jag vet att Server.Execute funkar, men jag gillar inte den.
Jag har sökt lite och märkt att flera har löst samma problem som mig genom att köra Server.Execute och sen infoga alla variablar i varje sida, eller nåt liknande.
Eller så har dem kört, Om str = hej Then include hej.asp, men det funkar inte för mig för att jag har för många sidor.
Nu till mitt problem:
Jag vill inkludera sidor beroende på en viss sträng.
Exempel (detta funkar inte, men jag visar bara för att illustrera)
<!-- #include file="page<%=sträng%>.asp" -->
Jag hade tänkt göra en funktion som öppnar sidan och sen Execute:ar innehållet.
Ungefär Så:
getText = Function getFileText("page" & sträng & ".asp")
Execute(getText)
Men hur ska jag hämta innehållet i filen?
Ska jag köra med FileSystemObject eller ska jag göra samma sak som man gör när man hämtar text från externa sidor?
Så nu, vad ska jag göra? Ska jag köra med min lösning eller ska jag leta efter nåt annat, eller vad f*n ska jag göra?
Tack i förhand!
@ndersMedlem sedan juni 200032 969 inlägg Om du nu måste göra på det sättet så är FSO att rekommendera för att öppna filerna.
Får man fråga varför du inte gillar Server.Execute? Det du försöker göra är ju samma sak som Server.Execute gör, fast på ett sämre sätt.
SnakesMedlem sedan okt. 2004392 inlägg Jo, jag vet... men jag har en funktionsfil som är inkluderad i en default.asp
sen har jag en sub fil som är inkluderad i default.asp. Denna inkludering vill jag göra i sub filen. Det lät kanske svårt... men det ser ut så här:
<!-- #include file="funktionsfil.asp" -->
<!-- #include file="huvudfil.asp" -->
<%If sida = "hej" Then%>
<!-- #include file="hejfil.asp" -->
<%ElseIf sida = "nej" Then%>
<!-- #include file="nejfil.asp" -->
<%End If%>
<!-- #include file="fotfil.asp" -->
Det är lite mer avancerat men iaf. Jag vill inte inkludera alla filer i hejfil.asp...
Det är jobbigt att förklara men hoppas du förstår...
SnakesMedlem sedan okt. 2004392 inlägg Förresten är det bättre att göra någon slags class?
Det är många include filer...
@ndersMedlem sedan juni 200032 969 inlägg Du måste använda #include om du vill ha tillgång till kod, funktioner / subrutiner, i filen du inkluderar. Både din hemmasnickrade metod med Exec() och server.execute exekverar innehållet i filen, och du har inte endast tillgång till resultatet av exekveringen.
Om du har många filer som ska inkluderas hit och dit, så bör du nog tänka om din struktur.
SnakesMedlem sedan okt. 2004392 inlägg Är du säker? För förut hade jag script kod i en databas som jag körde med EXECUTE.
variabel1 = "hej"
Execute rs("scriptkod")
koden i rs("scriptkod") kunde använda variabel1, men när jag gör så med Server.Execute("hej.asp") då kan jag inte använda variabel1
@ndersMedlem sedan juni 200032 969 inlägg Du har rätt i det du skriver om att komma åt "överliggande variabler".
Dock är det så att du i filen som exekverar inte kan använda funktioner som ligger i filen som exekveras. Ungefär så menade jag.
mvh
SnakesMedlem sedan okt. 2004392 inlägg Alltså är det bättre, i mitt fall, att köra med en funktion?
@ndersMedlem sedan juni 200032 969 inlägg Jag har ingen aning, för jag vet inte vad du vill göra eller vad du har i dina "många" filer.
Men det kan passa bra att du gör en funktion enl. ditt förslag i första inlägget, där du hämtar innehållet i vald fil med FSO, och exekverar med Execute.
Kom ihåg att du bara får ha ASP-kod i de filer du exekverar på detta sätt dock...
SnakesMedlem sedan okt. 2004392 inlägg Juste... förresten, måste jag ta bort <% och %> taggarna?
Kommer inte ihåg riktigt...
EDIT: Kollade precis och märkte att jag inte har någon text utanför %>.
SnakesMedlem sedan okt. 2004392 inlägg Gjorde så här, är detta det bästa sättet?
Function getFileContent(filePath)
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
Set fileObject = fileSystemObject.OpenTextFile(Server.MapPath(filePath))
getFileContent fileObject.ReadAll
End Function
Execute getFileContent("hej.asp")
PS. Bästa sättet att öppna en fil... inte include alltså
@ndersMedlem sedan juni 200032 969 inlägg Jag tror minsann att du måste ta bort <% och %>. Annars kan du ju låta din funktion replace:a bort contextswitcharna innan du kör Execute().
Edit: glöm inte förstöra dina objekt.
mvh
SnakesMedlem sedan okt. 2004392 inlägg Jo, det stämmer... dem måste bort.
Så blev det till slut:
Function getFileContent(filePath)
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
Set fileObject = fileSystemObject.OpenTextFile(Server.MapPath(filePath))
getFileContent = fileObject.ReadAll
getFileContent = Replace(getFileContent,"%" & ">","")
getFileContent = Replace(getFileContent,"<" & "%","")
EXECUTE (getFileContent)
End Function
En sista fråga bara, prestanda?
Tack för all hjälp förresten.
@ndersMedlem sedan juni 200032 969 inlägg Jag är lite osäker på prestandan, jag brukar akta mig för att göra på dylikt vis. Jag skulle tro att det är att föredra att skriva om koden så att man kan använda metoden Server.Execute(), om man har möjligheten.
Mvh
SnakesMedlem sedan okt. 2004392 inlägg Det skulle vara tråkigt om de var så... att Execute() tar mer prestanda än Server.Execute().
Jag ska göra några tester ifall jag får tid över.
Än en gång: Tack för all hjälp @nders.