2011-06-17 53 views
4

是否有可能通過JavaScript暴露Viewmodel的值?jQGrid和MVC 3.0 ViewModel

我想知道的原因是我的viewmodel已經有了所有必要的數據,並且想把它綁定到一個jQGrid。我可以看到它,我可以採取兩種方法(可能有更多的解決方案,我沒有看到):

  1. 通過Ajax獲取數據。這在測試項目中我曾經做過一次,並且網格顯示了值。如果這種方法,那麼我想我不會需要viewmodel,如果我用ajax獲取數據?

  2. 從viewmodel中獲取數據。我已經看到你如何設置jQGrid的方式是在JavaScript中。但是,那麼,我如何從viewmodel獲取數據並將jQGrid設置爲{ dataType: 'local', data = X },其中X應該是我的viewmodel的JSON?

希望我已經說清楚了=)

我需要提示進一步調查!

回答

1

您可以使用此:

return (model, JsonRequestBehavior.AllowGet); 

發送給你的網格的GET或POST請求JSON格式的響應。您將需要小心的數據來源格式,例如我們用這個作爲我們所有的jqGrid模型基類:

public class JqGridInfo<TModel> 
{ 
    public virtual int total { get; set; } 

    public virtual int page { get; set; } 

    public virtual int records { get; set; } 

    public virtual List<TModel> rows { get; set; } 
} 

這將使JSON響應模仿什麼jqGrid的期望。

1

將視圖模型序列化爲JSON字符串。我用ToJSON()擴展方法封裝了這種行爲。然後,你可以用

var jsObject = $.parseJSON('<%= Model.ToJSON() %>') 

加載它作爲一個JavaScript對象如果您還沒有解決方案中的一個JSON序列化機制,我強烈建議使用NewtonSoft's JSON.NET

它允許您通過簡單地調用JsonConvert.SerializeObject(Model)將C#對象轉換爲該對象的JSON字符串表示形式。