Как я могу использовать runat= "server" на теге скрипта в asp.Net

мне не обязательно запускать его на сервере, однако я хотел бы использовать ~/js/somefile.js синтаксис.

ранее я просто установил все с абсолютными путями и установил свой проект на корневом уровне. Итак, я бы просто объявил все мои таблицы стилей, фоновые изображения и файлы javascript чем-то вроде /css/somefile.css

однако для этого проекта он не работает как root.

Я не могу поставить runat="server" на тег script.

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

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

5 ответов


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

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

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

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

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

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

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


Вы можете получить полностью то, что вы хотите, обернув тег script с asp: 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;

взято из dailycoding.com:

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