2016-12-28 50 views
0

如何將新屬性引入我的mvc模型中,該模型將保存這些城市的json數據。用於在mvc模型中將數據公開爲json的DataType

public ActionResult Edit(int id) 
{ 
    MyModel model = repository.GetById(id); 
    if (model.CountryId.HasValue) 
    { 
     // load cities into new property 
    }  
    return this.View(result); 
} 

什麼數據類型應該是我的屬性(城市),如果我想在客戶端暴露爲json進一步js操作? ICollection的?有什麼建議嗎?

+0

您無法在'返回視圖()'中發送Json數據。你可以將你的數據綁定到你的模型屬性,並且在View中你可以將它作爲'@ Html.Raw(Json.Encode(Model.MyProperty))'; – mmushtaq

回答

1

將它們設置爲你喜歡的任何對象類型:

MyModel model = repository.GetById(id); 
if (model.CountryId.HasValue) 
{ 
    model.Cities = repository.GetCities(model.CountryId.Value); 
}  
return this.View(model); 

然後,在客戶端上,可以使用Json.NET庫序列化。當我試圖將數組傳遞給客戶端的JS組件時,我使用了這個技巧;本質上,它系列化的對象的陣列劃分爲客戶端陣列:

@(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Cities)) 

不管對象的類型表示每個城市是什麼決定什麼獲取呈現出給客戶端;它只是讀取對象並呈現具有所有相同屬性的等效JS對象。您可以通過說:

Model.Cities.Select(i => new { i.ID, i.Name, .. }) 

其中只包括一個子集。還有一些屬性可以用來排除我相信的某些列。

+0

所以我可以使用IEnumerable或ICollection作爲數據類型來填充服務器端,只要我在客戶端轉換城市? – user1765862

+0

那麼,IEnumerable 或ICollection 其中T必須以可序列化的方式定義。否則,請使用我提到的匿名對象技術。由序列化來控制它如何被序列化,我使用Json.NET。 –