Определите абсолютный URL-адрес ресурса, используя vbscript/classic asp

Я создал псевдопользовательский элемент управления для сайта, написанного на классическом asp. Элемент управления представляет собой просто страницу asp (с полными заголовками и телом HTML), которая находится в iframe на родительской странице. Суть заключалась в том, чтобы создать AJAX-подобный интерфейс для асинхронной загрузки файлов (родительская страница содержит большую форму, и я не хотел одновременно загружать файлы и отправлять остальную часть формы).
Проблема в том, что я сталкиваюсь с множеством проблем с относительными URL-адресами, используемыми на странице iframe/пользовательском элементе управления. В зависимости от того, дочерней ли страницей является iframe, относительное базовое местоположение URL-адреса, по-видимому, изменяется в зависимости от каталога, в котором находится конкретная страница.

Пример: 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>

Пути iframe src работают правильно (обратите внимание, что тот, который находится в более глубоком каталоге, имеет дополнительную двойную точку). Но в коде страницы FileUpload.asp относительные URL-адреса работают несогласованно. URL-адрес, который у меня есть в атрибуте действия для тега формы, работает, если вы просто загружаете страницу как есть, а не в iframe другой страницы. Вы можете изменить его на "../controls/FileUpload.asp", и он будет работать на первой странице приложения, но вы должны добавить еще один "../", чтобы он работал на второй странице приложения.
I мне было интересно, есть ли способ с помощью vbscript найти абсолютный URL-адрес определенного файла. Я использую включаемый файл, в который я мог бы жестко закодировать это, но я бы предпочел этого не делать, если это возможно. Любые другие идеи?


person rdevitt    schedule 09.07.2009    source источник


Ответы (2)


Вы также можете просто указать абсолютный путь от корня, например action="/controls/FileUpload.asp"

person Breadtruck    schedule 09.07.2009
comment
Ага. Вот и все. Глупо с моей стороны. - person rdevitt; 09.07.2009
comment
Нет проблем, на самом деле я всегда так делаю, несмотря ни на что, на случай, если я что-то перемещу, добавлю дополнительную папку или что-то еще. - person Breadtruck; 09.07.2009
comment
На самом деле я использовал Request.ServerVariables(URL), так как я просто отправляю сообщение на ту же страницу. Это кажется довольно последовательным способом доступа к ресурсу независимо от сервера, на котором он размещен, и в каких подкаталогах находится сайт. - person rdevitt; 09.07.2009
comment
Я согласен с этим. На самом деле у меня есть небольшой включаемый файл PageSetup с dim site_location site_location = lcase(Request.ServerVariables(URL)) Этот включаемый файл содержит все мои страницы, и я использую его для всех своих URL-адресов href и действий, если только у меня нет особых обстоятельств. Это также помогает, потому что, когда я меняю свои страницы, я меняю схему именования версий. blah_08.1.asp - person Breadtruck; 10.07.2009
comment
Вот что я собирался сказать. . . Я почти всегда использую абсолютные пути, чтобы избежать подобных проблем. - person tooshel; 10.07.2009

Я не уверен, что вы, возможно, ищете

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

Некоторый полезный код из Thorarin, который я только что видел в другом опубликовать

Найдите функцию ThisPage()

person feihtthief    schedule 09.07.2009
comment
Нет, это дает мне только абсолютный путь к файлу в файловой системе. Мне нужен URL-адрес (т. е. мне нужен «www.website.com/controls/FileUpload.asp», а не «c:\inetpub\wwwroot\website\controls\FileUpload.asp») - person rdevitt; 09.07.2009