2016-04-05 80 views
2

作爲this question的必然結果,我知道有可能使用var jsObject = @Html.Raw(Json.Encode(Model))等技術將MVC ViewModel對象轉換爲Javascript。在外部.js文件中將MVC ViewModel轉換爲Javascript對象

我假設只能在實際的.cshtml頁面上直接使用此技術。如果我想在外部.js文件中使用這些數據,該怎麼辦?

如果我在.cshtml頁面上實例化了var jsObject,我仍然可以從外部Javascript文件訪問此對象,還是會將它視爲超出範圍?

+0

使用[RazorJS](http://www.nuget.org/packages/RazorJS) –

+0

創建操作並使用jQuery ajax調用它。 – Brij

+0

@Brij我正在尋找一種方法來做到這一點,而無需再往返服務器。此外,RazorJS看起來並不像它的維護(它的網站是關閉的),我不想在我的Javascript文件中使用C#風格的語法。 – alex

回答

3

您可以從JavaScript文件中訪問生成的jsObject。爲了使其不超出範圍,就需要把它當作一個全球性的:

在你的`.cshtml':

var jsObject = @Html.Raw(Json.Encode(Model)) 
<script src="/path/to/jsFile.js"> 

裏面你jsFile.js

if(jsObject) 
{ 
// do whatever you need 
} 

注意由於您沒有將變量傳遞給jsFile.js中的方法,因此jsFile.js訪問它的唯一方法是知道您在.cshtml中給出的名稱。這會讓你的代碼非常脆弱。 另一種更好的方法是將變量傳遞給JavaScript函數。

在你.cshtml

<script src="/path/to/jsFile.js"> 

var jsObject = @Html.Raw(Json.Encode(Model)) 
myProcessor(jsObject) 

使用這種方法,該方法myProcessor不關心你的變量名是。

+0

酷技術和很好的解釋 - 謝謝! – alex

相關問題