2012-06-15 31 views
2

我開始之前,我想講清楚我的代碼工作正常,這更多的是一種「普通的最佳實踐」的問題。我正在使用knockout.js將我的ASP.NET MVC2模型加載到knockout的viewModel中。淘汰賽asp.net的MVC視圖模型JSON在頁面的源代碼

在我的aspx頁面我有:

<script> 
var model = <%= new JavaScriptSerializer().serialize(Model) %>; 
// the above line will display in my page's "View Source". Is this bad? slow? 
</script> 

然後在我的JavaScript包括在上面的文件我有:

$(document).ready(function() { 
    var viewModel = new MyViewModel(); 
    ko.applyBindings(viewModel); 

    viewModel.modelProp(model); 
}); 

代碼完全工作正常,但值得關注的我有這個在HTML輸出中,瀏覽器的「查看源代碼」選項中可以查看JSON輸出。我很好奇兩件事情:

  1. 這是否也發生在ASP.NET MVC3?我使用ASP.NET MVC2,因此我不能使用@ Html.Raw(Json.Encode(Model)); - 但是MVC3方法是否會導致相同的問題?

  2. 這是不是我應該關心?這是一個安全問題嗎?這是一個性能問題嗎?頁面的源代碼會更大,因爲我將JSON輸出到JavaScript變量中,不是?再一次,也許這不是MVC3中的問題?

+1

它也將發生在MVC3,與'@ Html.Raw'方法。 – Tyrsius

回答

1

如果我聽到你說對了,你想現在如果你應該擔心人們可以看到你的json。我不會擔心這一點。事實上,他們不僅可以看到JSON通過查看源,但他們也可以看到它通過網絡嗅探器一樣提琴手,HttpWatch或瀏覽器的開發者工具(F12)。我不確定你爲什麼關心json是否可見,因爲一旦它獲得了綁定到UI的數據,它也會在那裏。

作爲一個側面說明,通過加載從MVC你KO視圖模型,這意味着當您發表您的視圖模型只會刷新其模型數據。如果你通過ajax調用加載它(因爲你使用asp.net mvc,可能是一個MVC動作),你可以避免頁面刷新。只是另一種選擇。

+0

是的,你正確理解我的問題。我還會根據用戶所採取的操作,通過ajax調用替換模型,但這是針對初始數據加載的。由於模型是可觀察的,我總是可以替換它。我只是好奇,如果它是不安全或緩慢,在頁面源所有額外的信息。 –

+1

它更多的字節比沒有它,但如果你要處理的UI客戶端和使用數據綁定,等等,你需要在視圖模型那裏的JSON和所有與它去的腳本代碼。這是一個明顯的性能問題?不是沒有安全感嗎?只有當你把安全的信息放在那裏,我認爲你不是。 –

+0

謝謝。這讓我感覺更好。我使用的是特定頁面的視圖模型,因此聽起來像我遵循一般的最佳實踐。我會接受這個答案,但我很樂意有任何其他意見! –