Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将IEnumerable模型返回到MVC4中的MVC控制器_C#_Asp.net_Asp.net Mvc_Json_Asp.net Mvc 4 - Fatal编程技术网

C# 将IEnumerable模型返回到MVC4中的MVC控制器

C# 将IEnumerable模型返回到MVC4中的MVC控制器,c#,asp.net,asp.net-mvc,json,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Json,Asp.net Mvc 4,我试图将viewmodel绑定到一个数据集,该数据集来自MVC中的json结果。 这就是我所拥有的: 创建json结果的函数: private string WsUrl = "https://myUrl"; public List<RestCategories> GetCategoryResults(string api, string site) { List<RestCategories> categories = new List<R

我试图将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;
}
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);
}
[HttpGet]
公共行动结果类别()
{            
MyModel modelApi=新的MyModel();
List itemsResult=modelApi.GetCategoryResults(“测试”、“测试”);
CategoriesViewModelCat=新的CategoriesViewModel
{
//我需要一些魔法来返回RestCategories的ienumerable数据集
类别=项目结果。
};
返回视图(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);
}

这段代码简单、简洁,如果您将来更改变量的类型,它就不会像强类型一样脆弱。归根结底,这是一个风格和偏好的问题

列表继承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);
}

这段代码简单、简洁,如果您将来更改变量的类型,它就不会像强类型一样脆弱。归根结底,这是一个风格和偏好的问题

列表继承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);
}

这段代码简单、简洁,如果您将来更改变量的类型,它就不会像强类型一样脆弱。归根结底,这是一个风格和偏好的问题

列表继承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);
}


这段代码简单、简洁,如果您将来更改变量的类型,它就不会像强类型一样脆弱。归根结底,这是一个风格和偏好的问题

没有列出IEnumerable接口的实现?还是我在你的问题中遗漏了什么?@davidmartensson所有列表都实现了IEnumerable接口。@lazale你的问题不清楚。你到底想要什么?您的controller Categories()操作已在调用GetCategorityResults()函数,获取列表结果并将其放置在model Categories属性中。看起来都不错,你还需要什么?您所说的“我如何在控制器中查看返回的对象”是什么意思?例如,它是一个列表,因此您可以使用foreach对其进行迭代。@BartoszKP这是一个假设,尽管它很可能是正确的。列表不是实现IEnumerable接口吗?还是我在你的问题中遗漏了什么?@davidmartensson所有列表都实现了IEnumerable接口。@lazale你的问题不清楚。你到底想要什么?您的controller Categories()操作已在调用GetCategorityResults()函数,获取列表结果并将其放置在model Categories属性中。看起来都不错,你还需要什么?您所说的“我如何在控制器中查看返回的对象”是什么意思?例如,它是一个列表,因此您可以使用foreach对其进行迭代。@BartoszKP这是一个假设,尽管它很可能是正确的。列表不是实现IEnumerable接口吗?还是我在你的问题中遗漏了什么?@davidmartensson所有列表都实现了IEnumerable接口。@lazale你的问题不清楚。你到底想要什么?您的controller Categories()操作已在调用GetCategorityResults()函数,获取列表结果并将其放置在model Categories属性中。看起来都不错,你还需要什么?您所说的“我如何在控制器中查看返回的对象”是什么意思?例如,它是一个列表,因此您可以使用foreach对其进行迭代。@BartoszKP这是一个假设,尽管它很可能是正确的。列表不是实现IEnumerable接口吗?还是我在你的问题中遗漏了什么?@davidmartensson所有列表都实现了IEnumerable接口。@lazale你的问题不清楚。你到底想要什么?您的controller Categories()操作已在调用GetCategorityResults()函数,获取列表结果并将其放置在model Categories属性中。看起来都不错,你还需要什么?您所说的“我如何在控制器中查看返回的对象”是什么意思?它是一个列表,因此您可以使用foreach对其进行迭代,例如。@BartoszKP这是一个假设,尽管它很可能是正确的。有时MVC可能比我预期的简单得多。谢谢你的帮助,这不是问题……有时候,你只需要想办法就可以了。@Laziale MVC在这里并不重要。有时候,MVC比我想象的要简单得多。谢谢你的帮助,这不是问题……有时候,你只需要想办法就可以了。@Laziale MVC在这里并不重要。有时候,MVC比我想象的要简单得多。谢谢你的帮助,这不是问题……有时候,你只需要想办法就可以了。@Laziale MVC在这里并不重要。有时候,MVC比我想象的要简单得多。谢谢你的帮助,这不是问题……有时候,你只需要离开自己的头脑就可以看到解决方案。@Laziale MVC在这里无关紧要。