2012-07-30 96 views
1

我有一個控制器,用於將JSON數據列表傳遞給我的視圖。目前我正在使用Linq to Entities來填充Viewmodel,但由於它是一個僅包含15對的靜態列表,我想對Viewmodel進行硬編碼,但我不知道該怎麼做。這裏是我的控制器如何使用靜態數據填充視圖模型

public JsonResult GetSites() 
    { 
     var sites = context.vAaiomsSites.Select(s => new vAaiomsSitesVM 
     { 
      ID = s.ID, 
      SiteName = s.SiteName 
     }).OrderBy(s => s.SiteName); 

     return Json(sites, JsonRequestBehavior.AllowGet); 
    } 

我只需要一個這樣的數組:

SITEID:1,網站名:以物易物島

SITEID:2,網站名:利斯本角

... .12次以上。

+0

你的viewmodel是什麼樣的?它是否採用了SiteId的列表或者是否有x個網站ID的聲明? – Brian 2012-07-30 18:44:29

+0

想要對此進行硬編碼的任何特定原因?爲什麼不在第一次讀取它之後緩存呢? – 2012-07-30 18:47:57

回答

2

使用集合初始創建一個數組(或List<T>)中的ViewModels的:

public JsonResult GetSites() 
{ 
    var sitesArray = new vAaiomsSitesVM[] 
     { 
      new vAaiomsSitesVM 
      { 
       ID = 1, 
       SiteName = "Barter Island" 
      }, 

      new vAaiomsSitesVM 
      { 
       ID = 2, 
       SiteName = "Cape Lisburne" 
      } 

      // And so on... 
     }; 

    var sites = sitesArray.OrderBy(s => s.SiteName); 
    return Json(sites, JsonRequestBehavior.AllowGet); 
} 
2

如果你真的想硬編碼,你能做到這樣。

您的視圖模型

public class Site 
{ 
    public int SiteID { set;get;} 
    public string SiteName { set;get;} 
} 

和動作方法創建一個類

public JsonResult GetSites() 
{ 
    var list=new List<Site>(); 
    list.Add(new Site{ SiteID=1, SiteName="SiteName 1" }); 
    list.Add(new Site{ SiteID=2, SiteName="SiteName 2" }); 
    //13 more times !!!! 
    return Json(list, JsonRequestBehavior.AllowGet); 
} 

你爲什麼要硬編碼呢?我建議你儘可能避免這種情況。如果你擔心每次都在查詢數據庫,可能會考慮將數據存儲在中間緩存層中,並從中取出數據,從而避免調用數據庫。仔細想想。

+0

感謝您的代碼和建議。我想硬編碼它,因爲我的用戶在遠程站點提供衛星提供的互聯網,速度非常慢。我在下拉列表中使用網站列表作爲過濾器,並且在頁面加載時看到了一些延遲,所以我認爲由於只有15個網站,並且它們從不改變,我會看到性能上的好處。我想探索緩存選項,這聽起來很有趣。 – 2012-07-30 21:23:55

+0

@AlanFisher:緩存將減少一些網絡流量並帶來速度。祝你好運 – Shyju 2012-07-30 21:30:07

+0

@AlanFisher - 由於你的服務器仍然在發送相同數量的數據,所以這並不會對他們有任何好處,而這正是這種情況下的真正瓶頸。考慮使用壓縮技術(縮小JS/CSS文件,在IIS中使用Gzip壓縮) – 2012-07-31 02:14:15

相關問題