2010-08-18 2 views
13

Мне не обязательно запускать его на сервере, однако я бы хотел использовать синтаксис ~/js/somefile.js.Как использовать runat = "server" в теге скрипта в asp.Net

Раньше я только что установил все с помощью Абсолютных путей и установил, что мой проект находится на корневом уровне. Я просто объявляю все мои таблицы стилей, фоновые изображения и файлы javascript примерно как /css/somefile.css

Однако для этого проекта он не запускается с правами root.

Я не могу положить runat="server" на тег скрипта.

Я могу поместить его на тег ссылки.

Это должна быть распространенная проблема с несколькими простыми ответами.

ответ

19

То, что я всегда делал это использовать обычный script тег и положить src в <% %> теги, как показано на рисунке here:

<script language="javascript" src='<%=ResolveUrl("~/App_Themes/MainTheme/jquery.js")%>' type='text/javascript'></script> 
+0

Thanx! Да, теперь я помню это раньше. – Armstrongest

+0

Просто FYI, в соответствии с этим постом: http://stackoverflow.com/questions/778952/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blo лучше использовать # (DataBinding Expression) и Bind сзади. – Armstrongest

+0

@dl -_- lb: Никогда не видел этого раньше, но это имеет смысл. Благодаря! – David

3

Вы можете использовать функции внутри строки пути, хотя, например,

<script type="text/javascript" 
     src="<%=Url.Content("~/Scripts/jquery-1.4.2.min.js") %>"></script> 

Однако это синтаксис ASP.NET MVC для локальных путей - Я не могу вспомнить версию формы с верхней части моей головы.

+0

форм версии одно и то же. Синтаксис MVC наследуется от веб-форм. –

+0

@Joel Я имел в виду класс UrlHelper, который я использую, это только MVC. Как меня избили другие, версия форм - 'ResolveUrl' на' System.Web.UI.Control'. – Rup

1

Взятые из dailycoding.com:

<script language="javascript" src="<%=ResolveUrl("~/[PATH]")%>" type="text/javascript"></script> 
+0

Ха-ха, избитый минутой! – palswim

11

Вы можете использовать ScriptManager для этого:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
     <Scripts> 
      <asp:ScriptReference Path="~/js/somefile.js" /> 
     </Scripts> 
</asp:ScriptManager> 
+0

Я в прошлом делал это, да ... Интересно, какой лучший способ. Увеличивает ли это дополнительные накладные расходы? – Armstrongest

+0

ScriptManager (или ToolkitManager), как правило, является идеальным выбором в ASP.NET Webforms. –

+2

Почему предпочтительнее ResolveUrl? – Armstrongest

2

Вы можете получить полностью то, что вы хотите, обернув сценарий тег с осины: ContentPlaceHolder и вы можете получить доступ к нему из кода позади, например, набор будет ли она выполнена или не установив видимого свойство истинного или false. Вот пример:

<asp:ContentPlaceHolder runat="server" ID="PrintPreviewBlock" Visible="false"> 
    <script id="PrintPageCall" type="text/javascript" > 
     $(function() { 
      window.print(); 
     }); 
    </script> 
</asp:ContentPlaceHolder> 

и из кода позади:

PrintPreviewBlock.Visible = true;