2014-02-05 90 views
1

我有一個ASP.net MVC 4(Razor)應用程序。我們使用Dojo的1.9 Gridx來顯示數據。asp.net MVC - @ HTML.Raw寫出模型到頁面

我的控制器將我的模型返回到視圖。要使用在客戶端的模式工作,我通常會將其分配到JavaScript變量像這樣:

var _model = @Html.Raw(Json.Encode(Model)); 

然後我就可以通過_model到Dojo的是gridx控制。我不喜歡的是,如果您在瀏覽器中查看源代碼,_model中的數據在頁面上可見。設計中是否在瀏覽器中看到_model數據?還是有更好的方法來做到這一點?

回答

0

做到這一點的另一種方法(不知道它是否更好)是通過標準@model MyModel將模型發送到您的視圖,將其序列化爲JSON並將其設置爲input元素的值,然後獲取值通過Javascript的input。然後,您可以銷燬/刪除input元素,並且該數據在瀏覽器源中不再可見。

例子:

在Razor視圖

@model MyModel 

<input type="hidden" id="myViewModel" value="@Newtonsoft.Json.JsonConvert.SerializeObject(Model)" /> 

在你的javascrip文件

$(function(){ 
    var _model = JSON.parse($('#myViewModel').val()); 

    $('#myViewModel').remove(); 
}); 

做它自己的方式還是這樣,模型的全部數據將仍然在頁面的源代碼中(因此任何人都可以看到) - 即使它是爲了很多時間。請記住,在考慮應用程序的安全性時。

+0

對,我不希望模型的數據在頁面的源代碼中可見。我仍然可以查看模型的數據,即使分配給隱藏字段並將其刪除也不起作用。 – alpha

+0

@alpha你是什麼意思,確切地說,通過刪除它不起作用?如果你調用'$(element).remove()',那麼根據[jQuery docs](http://api.jquery.com/remove/),該元素及其所有子元素都將被刪除。通過上面的代碼,您將在「_model」變量中留下整個視圖模型(使用JSON),並且您無法在頁面的源代碼中看到任何視圖模型數據。 – rwisch45

+0

@alpha如果您只想將viewmodel數據轉換爲Javascript變量,以便您可以在某個Javascript框架中使用它,那麼您是否考慮過通過WebAPI獲取viewmodel?或者只是將它作爲JSON與MVC JSONResult一起返回?這兩個選項都會完全繞過將任何數據直接放入DOM – rwisch45