2009-07-28 54 views
33

最近我一直在使用ASP.NET MVC和Javascript/jQuery,並且我似乎正朝着我總是需要通過的方向前進一些動態值「to」我的javascript。當腳本是正確的頁面,我已經做了這樣的事情:將數據從asp.net-mvc傳遞給javascript的最佳實踐

var isEditable = <%=ViewData["editable"]%> 

我想這是怎麼快速&容易,就像我會注入一個值HTML。但這味道。真的,真的很糟糕。它打破了Visual Studio的智能感知和代碼格式,使我的腳本難以閱讀和理解。

它發生在我身上的另一個解決方案是我的數據傳遞給隱藏字段,並有javascript參考的是...

<input type="hidden" id="editable" value="<%=ViewData["editable"]%>" /> 
var isEditable = $("#editable").attr("value"); 

這可能是更好的,因爲它使腳本完整,將允許我將其移動到外部.js文件。但是關於這個解決方案的東西也不是很理想。還是僅僅是我?

任何人都可以推薦解決方案&將數據傳遞到腳本的最佳實踐?如果我的腳本最終嚴重依賴於我的控制器的視圖數據,我是否會走上錯誤的道路?

+1

將模型中的數據「拉」到AJAX控制器中的某種數據存儲如何? – Janie 2009-07-28 22:34:42

+1

我認爲AJAX在我所指的類型的案例中會過度...我的腳本通常只需要知道控制器/模型中的幾位數據(已經存在於初始頁面執行中的數據),所以發出另一個網絡呼叫回控制器似乎有點多。 – 2009-07-28 22:45:20

回答

11

我有時會通過JSON序列寫配置對象的頁面數據傳遞給我的網頁:

var pageConfig = <%= ServerConfig.ToJson() %>; 

,你需要自己編寫的toJSON方法。這可以使頁面狀態保持良好的狀態,這樣只有一個地方可以注入服務器值。從這裏出來的一切都是純粹的javascript。在你的榜樣,你可以再做:

var isEditable = pageConfig.isEditable; 

即使在外部js文件,如果pageConfig是全球性的。但是,在這種情況下,您應該正確命名空間:MY_APP.pageConfig也許。

0

您將以這種或那種方式注入該信息。而國際海事組織,你的第一個例子和第二個例子沒有什麼不同。

另一種解決方案是有一個JS類(或原型?),它將接受一個選項對象。雖然承認,它並沒有真正與你給出的例子不同。但是,也許你會想要這樣。

$(function() { 
    myClass.init({ isEditable: <%=ViewData["editable"]%>, 
     another: '<%=ViewData["another"]%>' }); 
}); 
0

我認爲@çağdaş提出了一個很好的觀點,但請記住也要檢查服務器端。如果將字段設置爲「只讀」,則不會阻止用戶修改該標誌,更改只讀字段並提交。

0

Ajax的全部業務是以異步方式向加載信息。如果你正在做Ajax的工作(加載信息並將其保存在一個變量中),那麼它正在消耗它的力量。爲什麼不嘗試JQuery並使用它的Ajax,或者獲取函數來動態加載內容。這將有助於您的網頁加載速度更快。

相關問題