Подтвердить что ты не робот

~/эквивалент в javascript

Какой-нибудь умный способ сделать "корневой" путь, ссылающийся на JavaScript, так же, как у нас есть ~/ в ASP.NET?

4b9b3361

Ответ 1

Создайте ли ваш сайт тег с чем-то вроде:

<link rel="home" id="ApplicationRoot" href="http://www.example.com/appRoot/" />

Затем у вас есть функция в JavaScript, которая извлекает значение, например:

function getHome(){
    return document.getElementById("ApplicationRoot").href;
}

Ответ 2

Используйте base тег:

<head>
   <base href="http://www.example.com/myapp/" />
</head>

...

теперь любое использование ссылок на этой странице, независимо от того, в javascript или html, будет относиться к базовому тегу, который является " http://www.example.com/myapp/".

Ответ 3

Вы также можете использовать функцию asp.net VirtualPathUtility:

<script>
var basePath = '<%=VirtualPathUtility.ToAbsolutePath("~/")%>';
</script>

Примечание. Я не кодирую путь к JSON -string (escape-кавычки, управляющие символы и т.д.). Я не думаю, что это большое дело (цитаты, например, не разрешены без привязки к URL-адресу), но никто не знает...

Ответ 4

Обычно я создаю переменную в верхней части js файла и назначаю ей корневой путь. Затем я использую эту переменную при ссылке на файл.

var rootPath = "/";
image.src = rootPath + "images/something.png";

Ответ 5

~/является корнем приложения, а не литеральным корнем, он интерпретирует ~/как означающий <YourAppVirtualDir>/

Чтобы сделать буквенный корень в JavaScript, это просто /, i.e "/root.html". Нет способа получить такой путь на уровне приложений, как в JavaScript.

Вы можете взломать его в файле ASPX и вывести его в тег, но я бы рассмотрел последствия для безопасности.

Ответ 6

Ответ Kamarey может быть улучшен для поддержки динамического базового пути:

<head>    
      <base href="http://<%= Request.Url.Authority + Request.ApplicationPath%>/" />    
</head> 

Это обеспечит правильный корневой путь независимо от конфигурации развертывания.

Чтобы быть справедливым, это не отвечает на исходный вопрос, но устраняет большинство потребностей для получения корневого пути из javascript. Просто используйте относительный URL везде, без префикса с косой чертой.

Если вам все еще нужно получить к нему доступ из javascript, добавьте атрибут id и используйте document.getElementFromId(), как предлагалось MiffTheFox, но в базовом теге.

Ответ 7

Другой вариант, который немного проще и универсален, заключался бы в следующем:

<script src="/assets/js/bootstrap.min.js"><script>

и используйте Page.ResolveClientUrl следующим образом:

<script src='<%=ResolveClientUrl("~/assets/js/bootstrap.min.js")%>'></script>

то независимо от того, в каком поддиректоре всегда будут отображаться URL-адреса.

Ответ 8

Следующая функция рассчитает корень текущего приложения. Я использую его для определения абсолютного местоположения ресурсов, когда вызывается откуда-то глубоко внутри дерева приложений.

    function AppRoot() {
        //
        // Returns the root of the currently running ASP application.
        // in the form: "http://localhost/TRMS40/"
        //
        //   origin: "http://localhost"
        // pathname: "/TRMS40/Test/Test%20EMA.aspx"
        //
        // usage:
        //           window.open( AppRoot() + "CertPlan_Editor.aspx?ID=" + ID);
        //

        var z = window.location.pathname.split('/');

        return window.location.origin + "/" + z[1] + "/";
    }

Ответ 9

В PreRender вашей базовой страницы .NET добавьте следующее:

 protected override void
 OnPreRender(EventArgs e) {
     base.OnPreRender(e);

     if (Page.Header != null)
     {
         //USED TO RESOLVE URL IN JAVASCRIPT
         string baseUrl = String.Format("var baseUrl='{0}';\n", 
           HttpContext.Current.Request.ApplicationPath);
         Page.Header.Controls.Add(new LiteralControl(String.Format(Consts.JS_TAG,
           baseUrl)));
     }
}

Затем в вашей глобальной функции JavaScript добавьте следующее:

 function resolveUrl(url) {
   if (url.indexOf("~/") == 0) {
     url = baseUrl + url.substring(2);
   }
 return url; }

Теперь вы можете использовать его следующим образом:

 document.getElementById('someimage').src = resolveUrl('~/images/protest.jpg');

Может быть немного для некоторых проектов, но отлично подходит для полноценных приложений.

Ответ 10

Решение для приложений ASP.NET MVC

Это работает при использовании IIS, а также IIS Express в VS.

Поместите этот фрагмент перед загрузкой всех скриптов, чтобы иметь корневую переменную url "approot".

к вашим услугам в скриптах:

<script>
        var approot = "@Url.Content("~")";
</script>

 --> other scripts go here or somewhere later in the page.

Затем используйте его в script или странице script. Пример:

var sound_root_path = approot + "sound/";
var img_root_path = approot + "img/";

переменная-помощник будет либо:

"/YourWebsiteName/" < - IIS

или просто:

"/" < - IIS Express

Ответ 11

Для страниц ASP.NET MVC Razor создайте базовый тег, как показано ниже в теге <Head>

<base href="http://@[email protected]" />

и во всех ваших относительных URL-адресах JavaScript обязательно начинайте без косой черты (/), иначе оно будет ссылаться на корень.

Например, создайте все свои URL-адреса, например

"riskInfo": { url: "Content/images/RiskInfo.png", id: "RI" },

или

$http.POST("Account/GetModelList", this, request, this.bindModelList);

Ответ 12

Если вы хотите использовать его в HTML, вы можете использовать ~, см. этот

 href = @Url.Content("~/controllername/actionName")

Обратите внимание на событие с щелчком мыши в приложении MVC

@Html.CheckBoxFor(m=>Model.IsChecked,  
   new {@[email protected]("~/controller/action("+ @Model.Id + ", 1)"), 
   @title="Select To Renew" })