2012-07-24 60 views
2

我有一個MVC應用程序。這是基本的設置,其中我做了以下更改About.cshtml:當部署爲虛擬目錄時,MVC站點extenal腳本不起作用

@{ 
    ViewBag.Title = "About Us"; 
} 
<script [email protected]("~/Scripts/test.js") type="text/javascript"></script> 
<h2>About</h2> 
<p> 
    Put content here. 
</p> 

所以我加入到外部腳本的引用。

腳本本身包含以下內容:

$(document).ready(function() { 

    $.post('/Home/GetResult', null, function (data) { 

     alert(data); 

    }); 

}); 

堪稱家居控制器的方法是:

public int GetResult() 
     { 
      return 3; 
     } 

因此,它是在用戶點擊了有關調用getResult方法的基本設置被調用並彈出一個包含3的警報。

因此,我在IIS中將其設置爲一個網站,並按預期工作。當點擊About時,彈出消息並且網站 的地址爲http://localhost:xx/Home/About

然後我嘗試將它設置爲虛擬目錄。

當點擊關於沒有消息彈出。 它所在的URL是:http://localhost:xx/Practise/Home/About其中practice是虛擬目錄的名稱。

那麼,爲什麼消息不會出現?

現在不能再找到該文件,現在url包含虛擬目錄名稱?

如果需要將其作爲虛擬目錄託管,那麼解決此問題的最佳方法是什麼?

+1

檢查HTML源代碼以查看正在加載.js文件的位置,看看您是否可以在瀏覽器中打開它。嘗試更改其URL到/Practise/Scripts/test.js – Daveo 2012-07-24 21:45:35

回答

1

你不應該使用硬編碼的URL。始終使用URL輔助函數嘗試像

$(document).ready(function() { 

    $.post('@Url.Action("GetResult", "Home")', null, function (data) { 

     alert(data); 

    }); 

}); 

負責實際的物理名稱爲您

+0

以及它在外部JavaScript文件,所以我不能使用該助手。這是否意味着你不能使用外部JavaScript文件,如果它是虛擬目錄? – AnonyMouse 2012-07-24 21:54:49

+0

如何爲[email protected](「〜/ Scripts/test.js」)一個外部腳本?無論如何,你可以使用外部腳本觸發你的頁面,但在這種情況下,你必須對它進行硬編碼,以便在出現問題時有所有問題。你最好的選擇可能是像IIS URL重寫http://www.iis.net/download/urlrewrite - 注意,我從來沒有使用它。 – 2012-07-25 16:32:43

1

通常我做的情況下,這樣是有寫在通過路由的網頁的網址,什麼,有庫消耗衆所周知的變量或採取對象初始化時:

在你的頁面:

var getResultUrl = '@Url.Action(...)'; 

在腳本文件:

$(document).ready(function() { 
    $.post(getResultUrl, null, function (data) { 

     alert(data); 
    }); 
}); 

你必須要小心的上這樣的東西,在網頁腳本需要運行之前,包括腳本,操作的順序,或者你需要做別的事情來調用它(包裝在一個函數) 。