簡體   English   中英

將IEnumerable模型返回到MVC4中的MVC控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM