2011-11-09 31 views
5

我有我的js文件在區域內,我無法訪問它們。當我將它們移到MVC區域之外時,我可以訪問它們。我可以在MVC區域內部署JavaScript文件嗎?

我曾嘗試以下:

  • 的js文件不同的命名 - 不能解決問題
  • 檢查,看看是否存在於服務器上 - 它們直接從內部做
  • Access文件服務器上的IIS管理器 - 它們不會打開並返回未找到
  • 直接從服務器上的IIS管理器中訪問相同文件,但是當文件位於腳本目錄中時 - 它們在瀏覽器中打開
  • 使用t他的路線檢查 - 當我試圖訪問它不打開文件路徑調試,而是隻是說「404」

這工作:

<script src="@Url.Content("~/Scripts/jquery/_Roles.js")" type="text/javascript"></script> 

這不起作用:

<script src="@Url.Content("~/Areas/Administration/Scripts/Roles/_Roles.js")" type="text/javascript"></script> 

對於阻止腳本的Areas文件夾下的文件可能有不同的東西嗎?

+0

爲什麼你在文件名中使用下劃線? – ZippyV

+0

公約爲我。不過,我可能會改變這一點。無論哪種方式,我注意到我仍然有同樣的問題。部署後,我的應用程序不喜歡區域中的腳本。然而,在dev服務器上本地運行是可以的。 –

+1

@SamanthaJ @ Url.Content()在客戶端呈現什麼?也許你的問題在那裏。 – shuniar

回答

-3

爲什麼把你的腳本中地區部分?我有一個帶有區域的mvc站點,但我仍然將腳本保留在腳本文件夾中。

我的建議是重新考慮以這種方式組織您的內容的原因,並考慮將所有外部.js文件移動到腳本文件夾。

+2

我至少可以想到一個理由 - 阻止用戶不具備管理權限的用戶閱讀管理面板腳本,這可能會給他們一些想法(路徑,功能等)。我真的來到這裏尋找有關在MVC區域內存儲腳本的信息... –

+12

區域是功能的邏輯分組,因此不考慮實現問題,爲什麼您不想將區域特定腳本放入區域文件夾?對我來說似乎是常識。 –

+2

如果您的架構遵循使用自治業務組件的SOA風格,這會產生很大的意義 –

0

你有沒有嘗試

ResolveUrl(

代替

Url.Content( 

斯特凡諾

+0

我現在就試試。該代碼正在Azure上運行,因此需要15分鐘才能上傳。檢查文檔我不確定它會有幫助,因爲它說:如果relativeUrl參數包含一個絕對URL,URL將被返回不變。如果relativeUrl參數包含相對URL,則該URL將更改爲相對於當前請求路徑正確的相對URL,以便瀏覽器可以解析URL。 –

0
<script type="text/javascript" src='<%: ResolveUrl("~/Scripts/jquery/_Roles.js") %>'> 
</script> 
1

another Stack Overflow question找到了答案,並調整了區域。

修改/Areas/AreaName/Views/web.config文件,以使服務器無法滿足JS和CSS文件:

<system.web> 
    <httpHandlers> 
     <add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 
    <!-- other content here --> 
</system.web> 

<system.webServer> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    <!-- other content here --> 
</system.webServer> 

這將使的.js和.css文件的服務,並且將禁止服務其他的東西。

+0

我將這些更改添加到駐留的web.config中在/Areas/AreaName/web.config中,它也可以工作。 – BrandonG

相關問題