2011-02-25 69 views
0

我有一個簡單的字段和一個jQuery網格的視圖。我通過我的模型填充的字段,所以我的第一個想法是試圖通過相同的方式填充我的網格。問題是,在我的頭撞到這個問題之後,我開始懷疑,也許我是在試圖反對穀物。這似乎是普遍接受的做法(更重要的是如何設計),視圖上的組件使用json的數據時,他們可以做一個單獨的調用來獲得JSONResult返回,然後他們將處理的效果最好。返回JSON查看的標準方法

通常這不會是一個大問題,但對於各種未來的證明原因(不是我的決定......有建築師的樂趣),我們有一個單獨的WCF層,我們的MVC層調用。所以現在我不得不擔心做出太多精細的電話。這實際上導致我嘗試基於模型的人口方法。我想知道的是這種方法有多普遍,或者如果每個人都擁有一組控制器方法來爲他們的UI組件調用JSON?

+0

架構,因爲它是不能改變的。在企業環境中,你有太多的運氣壓倒一名建築師,因爲你太陽能夠提早出現。我正在尋找的是如何在考慮遠程調用WCF層的成本的同時做些事情。 – 2011-02-25 15:10:55

回答

0

我使用JSON結果像

public class JSONOutputModel<T>{ 

     public int RequestId{ get; set; } 

     public string Type { get{ return typeof(T).FullName; } } 

     public T Model{ get; set; } 

} 

一個標準的通用模型。然後我有標準通用的發送/接收在JavaScript JSON方法。

+0

有關爲什麼這是downvoted的任何評論? – smartcaveman 2011-06-06 20:29:47

0

你可以從一個動作返回json的最普通的方式是簡單地調用Json()方法。

return Json(viewModel); 

如果您是專門爲jqGrid返回數據,則可以使用您自己的ActionResult。這是我們使用的。我們也有一個擴展方法來從我們的服務分頁封裝器轉換成這個結果。

public class TableResult : ActionResult 
{ 
    public override void ExecuteResult(ControllerContext context) 
    { 
     context.HttpContext.Response.Write(ToJqGridJson()); 
    } 

    public object ToJqGridJson() 
    { 
     return new {total = Total, page = Page, records = Records, rows = Rows}; 
    } 

    public int Total { get; set; } 
    public int Records { get; set; } 
    public int Page { get; set; } 
    public object[] Rows { get; set; } 
} 

在控制器:

return new TableResult() { ... }; 

或 返回queryResults.ToTableResult();

至於未來的證明,甚至不要嘗試!你將會得到很多大的前期設計,我保證它不會有回報。我們學習了艱難的方式,最近纔開始拋出大量的抽象。如果您不確切知道將來如何使用它,則沒有意義編寫代碼。此外,WCF可以很容易地被MVC應用程序本身取代。 MVC不必僅返回網站。我們已經轉向使用.net 4.0的JavaScript串行器+ MVC +客戶端JavaScript解串器來提供Web服務。你可以分享你已經爲MVC編寫的認證,加上所有的過濾器等,而不必擔心配置WCF的可怕混亂。看看技術在向何處發展:移動和集成!你不會在你的手機上做WCF。看看JSON,ATOM,RSS等

http://ayende.com/Blog/archive/2011/02/23/flatten-your-architecture-simplicity-as-a-core-value.aspx

+0

我並沒有要求對我們的架構作出迴應。如果您認爲我們可以重寫架構師,那麼您顯然從未在企業工作過;) – 2011-02-25 15:05:59

+0

我的答案的其餘部分與此無關嗎? (並且我在企業中工作,我瞭解到大多數「架構師」只是名稱上的架構師。) – Ryan 2011-02-25 16:34:11

+0

ps,是否只返回一個帶有jqGrid的ViewResult需要創建WCF調用的操作?你能緩存一些東西,所以你不需要這麼多的服務?當你真的可以緩存客戶端的簡單查詢(在你的情況下,在web應用程序中)時,這些服務的一個常見謬誤是建立一個SELECT N + 1場景(並且在系統變得嚴峻之前它不明顯!)。 – Ryan 2011-02-25 16:41:26