[英]Return IEnumerable Model to MVC Controller in MVC4
我正在嘗試將viewmodel綁定到來自MVC中json結果的數據集。 這就是我所擁有的:
我創建json結果的函數:
private string WsUrl = "https://myUrl";
public List<RestCategories> GetCategoryResults(string api, string site)
{
List<RestCategories> categories = new List<RestCategories>();
RestCategories cat;
var webRequest = (HttpWebRequest)WebRequest.Create(WsUrl);
webRequest.Method = "GET";
try
{
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
var reader = new StreamReader(webResponse.GetResponseStream());
string s = reader.ReadToEnd();
var arr = JsonConvert.DeserializeObject<JArray>(s);
int i = 1;
foreach (JObject obj in arr)
{
cat = new RestCategories();
cat.DisplayInPrimaryCategoryListing = (bool)obj["DisplayInPrimaryCategoryListing"];
cat.ID = (int)obj["ID"];
cat.ItemCount = (int)obj["ItemCount"];
cat.Name = (string)obj["Name"];
cat.Order = (int)obj["Order"];
cat.SubCategoryOf = (string)obj["SubCategoryOf"].ToString();
categories.Add(cat);
}
return categories;
}
}
catch
{
throw;
}
return categories;
}
這就是CategoriewViewModel
:
public class CategoriesViewModel
{
public IEnumerable<RestCategories> Categories;
}
RestCategories
定義:
public class RestCategories
{
public int ID { get; set; }
public int ItemCount { get; set; }
public string Name { get; set; }
}
最后,我想在控制器中進行如下操作:
[HttpGet]
public ActionResult Categories()
{
MyModel modelApi = new MyModel();
List<RestCategories> itemsResult = modelApi.GetCategoryResults("test", "test");
CategoriesViewModel modelCat = new CategoriesViewModel
{
//I need some magic here to return ienumerable dataset of RestCategories
Categories = itemsResult.
};
return View(modelCat);
}
現在,您可以看到我想返回IEnumerable
類型的模型,因為從Web服務調用中將獲得多個結果。 也許我需要執行GetCategoryResults
方法以返回多個結果? 即使這樣做,我又如何查看控制器中返回的對象以得到我想要的東西?
列表繼承IEnumerable。 您應該能夠只將itemsResult變量更改為IEnumerable,並使一切變得愉快。
[HttpGet]
public ActionResult Categories()
{
MyModel modelApi = new MyModel();
IEnumerable<RestCategories> itemsResult = modelApi.GetCategoryResults("test", "test");
CategoriesViewModel modelCat = new CategoriesViewModel
{
Categories = itemsResult
};
return View(modelCat);
}
作為附帶說明,我更喜歡盡可能使用var,因為它首先避免了這些問題。 例如
[HttpGet]
public ActionResult Categories()
{
var modelApi = new MyModel();
var itemsResult = modelApi.GetCategoryResults("test", "test");
var modelCat = new CategoriesViewModel
{
Categories = itemsResult
};
return View(modelCat);
}
這段代碼簡單明了,如果將來要更改變量的類型,它不如強類型鍵入那么脆弱。 歸根結底,這是風格和偏好的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.