2010-08-18 38 views
13

我不一定需要在服務器上運行它,但是,我想使用~/js/somefile.js語法。如何在asp.Net的腳本標籤上使用runat =「server」

此前,我剛剛設置了絕對路徑的所有內容,並將我的項目設置爲根級別。所以,我只是宣佈我的所有樣式表,背景圖像和JavaScript文件類似/css/somefile.css

但是,對於此項目,它不作爲根運行。

我不能把runat="server"放在腳本標籤上。

雖然我可以把它放在鏈接標籤上。

這只是一個簡單答案的常見問題。

回答

19

我一直在做的是使用普通script標籤,並把src<% %>標籤,如圖所示here

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

Thanx!是的,現在我記得以前看過這個。 – Armstrongest 2010-08-18 19:07:56

+0

只是一個FYI,根據這篇文章:http://stackoverflow.com/questions/778952/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blo它最好使用#( DataBinding表達式)和從後面綁定。 – Armstrongest 2010-08-18 19:38:36

+0

@dl -_- lb:以前從來沒有見過,但它是有道理的。謝謝! – David 2010-08-18 20:01:55

3

雖然你可以使用路徑字符串中的函數,

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

但是,這是本地路徑的ASP.NET MVC語法 - 我不記得形式版本的頭頂。

+0

形式的版本是相同的。 MVC語法是從Web表單繼承而來的。 – 2010-08-18 19:02:33

+0

@Joel我的意思是我使用的UrlHelper類只有MVC。當其他人打敗我時,表單版本是'System.Web.UI.Control'上的'ResolveUrl'。 – Rup 2010-08-18 19:27:44

1

dailycoding.com摘自:

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

哈哈,被打了一分鐘! – palswim 2010-08-18 18:58:29

11

可以使用ScriptManager爲此:

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

我在過去做過這件事,是的......我想知道最好的方法是什麼。這是否會增加其他開銷? – Armstrongest 2010-08-18 19:07:37

+0

ScriptManager(或ToolkitManager)通常是ASP的理想選擇。NET Webforms。 – 2010-08-18 19:13:46

+2

爲什麼優先於ResolveUrl? – Armstrongest 2010-08-18 20:43:16

2

您可以通過包裝腳本標籤與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;