PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Include nur einmal ausführen?


Hahne
28.03.2008, 08:21
Hi!
Ich sitze an einem Projekt und es tritt gerade ein Problem auf. Ich habe eine default.asp Seite in der z.b. header.asp, menu.asp, content.asp und footer.asp inkludiert werden. Jetzt wollte ich das gerne so machen , dass wenn ich auf ein Menüpunkt klicke sich der Include von content.asp geändert wird.

Was ich zuerst versucht habe war, dass ich ein Wert über den Browser mitgegeben habe und dann wollte ich mit Hilfe von meiner Variable und meinen normalen Include <!-- #include file="Request.QueryString("page")" --> meine neue Seite einfügen, aber das funktioniert ja nicht.

Dann habe ich das auch schon mit Execute ausprobiert nur dieser Befehl nimmt leider keine QueryStrings an.

Wie kann man denn dann noch dynamische Includes verwirklichen? Ich stehe irgendwie auf'm Schlauch.

Gruß Hahne


Peter Bucher
28.03.2008, 12:15
Hallo Hahne

Gibts AFAIK nicht.
Aber guck mal hier: http://www.aspfaq.de/index.asp?RID=5&FID=14&SFI=1&ELE=1223&OPID=0&ORID=0&OSST=include&OSFI=1


Gruss Peter

Hahne
28.03.2008, 12:40
Hi!
Ich habe gerade meine Frage noch einmal etwas umgeändert um es verständlicher zu machen.

Das mit dem Server.Execute(Variable) habe ich ebenfalls schon ausprobiert aber das Problem bei dem Punkt war ja leider, dass Execute den Befehl Request.QueryString nicht mag.

Es muss dohc möglich sein einen dynamischen Include zu machen.

Peter Bucher
28.03.2008, 13:32
Hallo

Ja, siehe mein Link (oben).


Gruss Peter

Hahne
31.03.2008, 09:59
Ich habe mir den Link den ich von dir bekommen hab noch einmal angeschaut und auch ein wenig rumprobiert. Jetzt habe ich aber das Problem. Ich bekomme die Datei "eins.asp" nicht ausgegeben.

Mein Status im Script ist im Moment so, dass ich meine Funktion mit

Execute ReadVirtualFile("eins.asp")

aufrufe und dann in der Funktion folgendes bearbeitet wird:

Function ReadVirtualFile(strVirtualDateiname)
Dim strDateiname
strDateiname = Server.MapPath(strVirtualDateiname)
ReadVirtualFile = ReadFile(strDateiname)
End Function

Wenn ich den Script dann ausführe kommt wieder eine Fehlermeldung:

Fehlertyp:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'ReadFile'
/rsa/test/test.asp, line 7


Gruß
Hahne

Hahne
31.03.2008, 11:15
Hallo!
Habe jetzt noch eine Lösung gefunden wobei ich sagen muss, dass die auch nicht ganz glücklich ist da zwar HTML Code ausgeführt wird jedoch wenn in diesem Code ASP enthalten ist wird dieser nicht ausgeführt. Der Befehl ist eigentlich sehr leicht:

<%
FileName = Server.MapPath(Request.QueryString("page")&".html")
Response.Write CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, False, False).readall
%>

Ich frage mich nur wieso er den ASP-Code nicht ausführt.

Ich mein es kann ja normal nicht so schwierig sein ein dynamischen Content zu erstellen. Ich glaube ich mach mir das Leben schon wieder unnütze scher :mauer::D:D:D

Kilroy576
01.04.2008, 09:19
Hallo,

der ASP Code kann nicht ausgeführt werden, da zu diesem Zeitpunkt die Ausführung von ASP schon erfolgt ist. Mit dem ResponseWrite fügst Du den Inhalt lediglich direkt in den HTML Code ein.

Für die Ausführung gibt es den Execute Befehl. Dafür hat Dir ja Peter schon den Link zum Code geschickt.

Gruss Ralf

Peter Bucher
01.04.2008, 09:33
Hallo

Genau, und für VBScript selber gäbe es auch einen Execute() Befehlt (ähnlich zu Eval() in Javascript).
Aber hier ist Server.Execute() das richtige Werkzeug.


Gruss Peter

Hahne
01.04.2008, 11:36
Ich habe mir die Seite ja schonmal angeguckt und mir ist auch klar das ich eine Variable erstellen kann die einen Pfad enthält und diese Datei mit Hilfe von Execute ausführen kann nur das Problem ist, dass ich den Wert der Variable aus meinem Hyperlink hole:

<a href="index.asp?page=home">

Jetzt versucht doch mal zuerst den Wert von "page" in eine Variable zu speichern:

path = Request.QueryString("page")

und dann mit Hilfe von Execute aufzurufen:

Server.Execute(path)

Dann erscheind immer eine Fehlermeldung die wie folgt aussieht:

Fehlertyp:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'QueryString'


Die andere Methode Select Case möchte ich auch nicht unbedingt benutzen! Diese Art ist meiner Meinung nach nicht wirklich schön.

Habe mitlerweile echt kein Plan mehr! :(

Peter Bucher
01.04.2008, 12:05
Hallo Hahne

Machs mit Select Case, ist schöner _und_ sicherer.
Ausserdem, was soll Classic ASP per "page" Anfangen?
Hast du eine ASP Seite die "page" heisst?


Gruss Peter

Hahne
01.04.2008, 13:07
Hallo Hahne

Machs mit Select Case, ist schöner _und_ sicherer.
Ausserdem, was soll Classic ASP per "page" Anfangen?
Hast du eine ASP Seite die "page" heisst?


Gruss Peter


Nee ich habe keine Seite die "page" heisst. So wie bei PHP die GET-Funktion ($_GET['variable']) wollte ich aus meinem Link (<a href="index.asp?page=home">) den Wert "home" rausbekommen. Sprich über den Link füge ich der Variable "page" den Wert "home" zu und rufe die mit Hilfe von Request.QueryString(page) wieder ab. Hoffe du weisst wie ich das meine. Sonst schau mal hier: http://www.aspheute.com/artikel/20000529.htm
So möchte ich den Wert übergeben!


Ja ich werde das jetzt glaub ich doch nochmal versuchen mit Hilfe von Select Case zu verwirklichen. Das einzigst blöde ist natürlich dann nachher der Verwaltungsaufwand wenn ich einen neuen Menüpunkt hinzufügen möchte.

Habe auch schon ne Selectabfrage geschrieben nur leider kommt da immer noch der selbe Fehler wie ich gerade vorhin oben schon gepostet habe. Meine Selectabfrage sieht wie folgt aus:


<%
SitePath = Request.QueryString("page")

Select Case SitePath

Case eins
Server.Execute("files/eins.asp")

Case zwei
Server.Execute("files/zwei.asp")

Case drei
Server.Execute("files/drei.asp")

Case test
Server.Execute("files/test.asp")

Case Else
Server.Execute("files/home.asp")

End Select
%>

Hahne
01.04.2008, 13:16
Soooo ok!!! Die Select Case Abfrage funktioniert! Habe vergessen, dass ich keine Nummer sondern einen String vergleiche und dann muss ich natürlich hinter Case den Vergleichswert mit Anführungszeichen schreiben.

Kilroy576
01.04.2008, 13:25
Also wenn das jetzt funktioniert, dann muss auch die Übergabe mit Request.QueryString funktionieren. Ich denke der Fehler liegt an einer anderen Stelle.

Ob Du den Filename aus einer Varaiablen oder Hart codiert bekommst sollte egal sein. Wenn Dein Code von vorhin der Realität entspricht, dann hast Du meiner Meinung nach einfach einen Teil des Pfades und die Extension vergessen...

Probier mal statt
<a href="index.asp?page=home">
das hier
<a href="index.asp?page=files/home.asp">

Eventuell musst Du es noch codieren wegen dem Slash.

Oder wenn das Verzeichnis und die Extension eh immer gleich sind:
path = "files/" & Request.QueryString("page") & ".asp"
Server.Execute(path)

Hahne
02.04.2008, 08:17
Es funktionieren ja jetzt alle Includes bis auf eine Seite.

Ich habe in meinem Menü nur zum Test noch ein Link drin mit dem Namen "Test" welcher auf eine ASP-Info-Seite (ähnlich phpinfo() ) verlinkt. Nur wenn ich auf den Link klicke und die Seite uncludet werden soll gibt es einen Fehler.


Fehlertyp:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'QueryString'
/rsa/files/test.asp, line 952

Ich glaube mein Request.QueryString:

SitePath = Request.QueryString("page")

verträgt sich nicht so ganz mit einer Zeile 952 aus der Seite "test.asp":

Response.Write Display_Data ("Request.QueryString(""" & STR_KEY & """)", QueryString(STR_KEY))

Habe nämlich schomal mein QueryString auskommentiert und die "test.asp" Seite direkt in mein Projekt includiert und da ging das dann ohne Probleme.

Kilroy576
02.04.2008, 08:55
Tja, gute Frage ...

Dazu müsste man wohl wissen was Deine Funktion Display_Data und Deine Funktion QueryString() macht ...
Bisher sehe ich keinen Zusammenhang zwischen den beiden Zeilen.

Eventuell macht es Sinn Deine Zeile etwas zu ändern
Response.Write Display_Data ("Request.QueryString(""" & STR_KEY & """)", Request.QueryString(STR_KEY))

Hahne
02.04.2008, 09:49
Cool besten Dank! Der Fehler lag wirklich daran, dass ich Response vergessen hab. Hab das überhaupt nicht gesehn. Total übersehen!

Kilroy576
02.04.2008, 09:52
Kein Ursache. Das war ja Sinn der Sache ... ;)