2009-07-09 4 views
2

Ich habe ein Pseudo-Benutzersteuerelement für eine Website erstellt in klassischen ASP geschrieben. Das Steuerelement ist einfach eine Asp-Seite (mit vollständigen HTML-Headern und Text), die sich in einem iframe auf der übergeordneten Seite befindet. Es ging darum, eine AJAX-ähnliche Oberfläche für das asynchrone Hochladen von Dateien zu erstellen (die übergeordnete Seite enthält ein großes Formular und ich wollte die Dateien nicht hochladen und den Rest des Formulars zur gleichen Zeit absenden).
Das Problem ist, ich habe eine Menge Probleme mit relativen URLs in der Iframe-Seite/Benutzer-Steuerelement verwendet. Je nachdem, welche Seite ist die iframe ein Kind, die relative URL Basis Lage nach dem Verzeichnis zu ändern scheint, dass bestimmte Seite in istErmitteln Sie eine absolute URL zu einer Ressource mithilfe von VBScript/classic asp

. Beispiel: www.website.com/directory1/application1.asp

... 
<form> 
    <input> 
    ... 
    <iframe src="../controls/FileUpload.asp"/> 
    ... 
</form> 
... 

www.website.com/directory1/directory2/application2.asp

... 
<form> 
    <input> 
    ... 
    <iframe src="../../controls/FileUpload.asp"/> 
    ... 
</form> 
... 

www.website.com/controls/FileUpload.asp

... 
<form method="post" enctype="multipart/form-data" action="FileUpload.asp"><!--problem here--> 
    <input type="file"> 
    <input type="submit"/> 
</form> 

Die iframe src-Pfade funktionieren ordnungsgemäß (beachten Sie, dass der Pfad, der tiefer in ein Verzeichnis eingebettet ist, einen zusätzlichen doppelten Punkt enthält). Im Code für die Seite FileUpload.asp funktionieren relative URLs jedoch nicht konsistent. Die URL, die ich im Aktionsattribut für das Formular-Tag habe, funktioniert, wenn Sie die Seite einfach so wie sie ist laden, nicht in einem Iframe einer anderen Seite. Sie können es in "../controls/FileUpload.asp" ändern und es wird auf der ersten Anwendungsseite funktionieren, aber Sie müssen ein weiteres "../" hinzufügen, damit es auf der zweiten Anwendungsseite funktioniert.
Ich frage mich, ob es vielleicht einen Weg mit VBScript gibt, um die absolute URL zu einer bestimmten Datei zu finden. Ich benutze eine Include-Datei, in die ich das hart codieren könnte, aber ich würde lieber nicht, wenn das möglich ist. Irgendwelche anderen Ideen?

Antwort

4

Sie könnten auch Geben Sie einfach einen absoluten Pfad vom Stammverzeichnis ein, z. B. action = "/ controls/FileUpload.asp"

+0

Ja. Das ist es. Dumm von mir wirklich. – rdevitt

+0

Kein Problem, in der Tat mache ich das immer so, egal was passiert, falls ich etwas umherbewege, einen zusätzlichen Ordner oder was auch immer hinzufüge. – Breadtruck

+0

Ich habe am Ende Request.ServerVariables ("URL") verwendet, da ich gerade zurück auf die gleiche Seite posten. Dies scheint eine ziemlich konsistente Möglichkeit zu sein, auf die Ressource zuzugreifen, unabhängig davon, auf welchem ​​Server sie gehostet wird und in welchen Unterverzeichnissen sich die Site befindet. – rdevitt

0

Ich bin mir nicht sicher, ob Sie vielleicht suchen

<% 
Response.Write Server.MapPath("./foo.txt") 
%> 

Some usefull code von Thorarin , die ich gerade gesehen, in einem different post

Suchen Sie nach Thispage() Funktion

+0

Nein, das gibt mir nur den absoluten Pfad zu der Datei im Dateisystem. Ich brauche eine URL (d. H. Ich brauche 'www.website.com/controls/FileUpload.asp' nicht 'c: \ inetpub \ wwwroot \ website \ controls \ FileUpload.asp') – rdevitt