2012-03-02 55 views
0

我有一個JavaScript應用程序(與SignalR後端ASP.net MVC 3),我想只返回所需的字段(它必須是動態的)。ASP.NET MVC 3 - 創建一個僅用於返回的動態對象

我使用實體框架,但我不能選擇只有特定的列,因爲我需要一些字段進行檢查或方法中的東西在客戶端不需要。

所以,目前我有這樣的:

public void GetPerson(int personID) 
    { 
     // Some logic... 

     // person is a entity from the entity framework (Person) 
     dynamic p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

     Clients[Context.ConnectionId].loadPerson(p); 
    } 

但我不知道,如果它是一個很好的做法(性能等)。是否有更好的解決方案,還是可以繼續使用動態類型?

+3

我不明白你的例子。你創建p,但不使用它? – 2012-03-02 20:42:12

+0

這會很好(假設你在某個時候返回p)。我只是想知道你節省的帶寬是多少。如果您返回了很多物體,或者您擁有很高的流量,這可能是值得的,但如果這兩種情況都不是這樣的話,那麼可能就沒有必要。 – 2012-03-02 20:49:28

+0

@Mystere人,我編輯它。我返回P. – 2012-03-02 20:51:07

回答

2

你使用的是ExpandoObject

你的例子,也許只使用一個匿名類型而不是動態類型。

var p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

這將確保您仍然可以進行編譯時檢查。但是,要麼應該工作。有關匿名與動態的更多詳細信息,請參見this

0

看起來很好。如果您需要其他列,然後返回它們,做你需要做的事情,然後像你一樣創建一個匿名人物並將其傳入。

0

MVC的最佳實踐是,無論是通過JSON還是使用SignalR將數據返回給視圖或客戶端,都是使用強類型對象。只需創建一個專門用於您想要返回並使用它的數據的ViewModel。我通常使用[Controller] [Action] ViewModel的約定來命名這些類。所以可能是MemberDetailsViewModel

好處包括編譯時檢查,更容易的序列化,以及稍後修改時的問題。

我剛剛嘗試了什麼,當我第一次開始玩MVC時。相信我,這不值得你現在感覺到的便利。

如果您返回的數據必須是動態的,您可能想要嘗試返回一組鍵值對。