Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc 创建下拉列表时出错-ASP.NET MVC 4使用EF数据库优先方法-为DI实现Ninject_Asp.net Mvc_Entity Framework_Dependency Injection_Ninject - Fatal编程技术网

Asp.net mvc 创建下拉列表时出错-ASP.NET MVC 4使用EF数据库优先方法-为DI实现Ninject

Asp.net mvc 创建下拉列表时出错-ASP.NET MVC 4使用EF数据库优先方法-为DI实现Ninject,asp.net-mvc,entity-framework,dependency-injection,ninject,Asp.net Mvc,Entity Framework,Dependency Injection,Ninject,请参阅下面的代码。我试图通过使用EF数据库优先方法创建一个下拉列表,并为DI实现Ninject。我不熟悉这些概念,我不知道我做错了什么。任何帮助都将不胜感激-谢谢 下面是我的错误: @model TestApp.Models.MyViewModel @using (Html.BeginForm()) { @Html.DropDownListFor(x=>x.SelectedCityID, Model.Cities, "Select City") <button type = "s

请参阅下面的代码。我试图通过使用EF数据库优先方法创建一个下拉列表,并为DI实现Ninject。我不熟悉这些概念,我不知道我做错了什么。任何帮助都将不胜感激-谢谢

下面是我的错误:

@model TestApp.Models.MyViewModel

@using (Html.BeginForm())
{ 
@Html.DropDownListFor(x=>x.SelectedCityID, Model.Cities, "Select City")
<button type = "submit">OK</button>
}
无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IEnumerable”

下面是我的控制器

public class CitiesController: Controller
{
    private readonly ICitiesRepository repository;
    public CitiesController(ICitiesRepository repository)
    {
        this.repository = repository;
    }

    public ActionResult Index()
    {
        var model = new Models.MyViewModel();
        model.Cities = this
            .repository
            .GetAll()
            .ToList()
            .Select(x => new SelectListItem
            {
                Value = x.Id.ToString(),
                Text = x.Name
            });
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return Content("Thanks for selecting city: " + model.SelectedCityId);
    }
}
我在Models文件夹下有以下三个类(CityDTO、MyViewModel、MyModel)。

CityDTO.cs

  public class CityDTO
    {
        public string CityId { get; set; }
        public string CityName { get; set; }

    }
public class MyViewModel
{
    public string SelectedCityId { get; set; }
    public IEnumerable<SelectListItem> Cities { get; set; }
}
public interface ICitiesRepository
{
    IEnumerable<City> GetAll();
}

public class CitiesRepositoryEF: ICitiesRepository
    {
        public IEnumerable<City> GetAll()
        {
            using (var ctx = new LocationEntities())
            {
                return ctx.usp_GetAllCities().ToList();
            }
        }
    }
 protected void Application_Start()
        {
            App_Start.NinjectWebCommon.Start();
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<Models.ICitiesRepository>().To<Models.CitiesRepositoryEF>();
        }  
MyViewModel.cs

  public class CityDTO
    {
        public string CityId { get; set; }
        public string CityName { get; set; }

    }
public class MyViewModel
{
    public string SelectedCityId { get; set; }
    public IEnumerable<SelectListItem> Cities { get; set; }
}
public interface ICitiesRepository
{
    IEnumerable<City> GetAll();
}

public class CitiesRepositoryEF: ICitiesRepository
    {
        public IEnumerable<City> GetAll()
        {
            using (var ctx = new LocationEntities())
            {
                return ctx.usp_GetAllCities().ToList();
            }
        }
    }
 protected void Application_Start()
        {
            App_Start.NinjectWebCommon.Start();
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<Models.ICitiesRepository>().To<Models.CitiesRepositoryEF>();
        }  
应用程序启动/NinjectWebCommon.cs

  public class CityDTO
    {
        public string CityId { get; set; }
        public string CityName { get; set; }

    }
public class MyViewModel
{
    public string SelectedCityId { get; set; }
    public IEnumerable<SelectListItem> Cities { get; set; }
}
public interface ICitiesRepository
{
    IEnumerable<City> GetAll();
}

public class CitiesRepositoryEF: ICitiesRepository
    {
        public IEnumerable<City> GetAll()
        {
            using (var ctx = new LocationEntities())
            {
                return ctx.usp_GetAllCities().ToList();
            }
        }
    }
 protected void Application_Start()
        {
            App_Start.NinjectWebCommon.Start();
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<Models.ICitiesRepository>().To<Models.CitiesRepositoryEF>();
        }  
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To();
}  
下面是我的观点:

@model TestApp.Models.MyViewModel

@using (Html.BeginForm())
{ 
@Html.DropDownListFor(x=>x.SelectedCityID, Model.Cities, "Select City")
<button type = "submit">OK</button>
}
@model TestApp.Models.MyViewModel
@使用(Html.BeginForm())
{ 
@Html.DropDownListFor(x=>x.SelectedCityID,Model.Cities,“选择城市”)
好啊
}

您的方法签名说它想返回IEnumerable,但您正在返回List。就这样仔细看看你的方法吧:

    public List<City> GetAll()
    {
        using (var ctx = new LocationEntities())
        {
            return ctx.usp_GetAllCities().ToList();  
        }
    }
public List GetAll()
{
使用(var ctx=new LocationEntities())
{
返回ctx.usp_GetAllCities().ToList();
}
}
这样,您就不必再在操作中调用ToList()

model.Cities = this
        .repository
        .GetAll()
        //.ToList()  <-- delete this
        .Select(x => new SelectListItem
        {
            Value = x.Id.ToString(),
            Text = x.Name
        });
model.Cities=此
.储存库
.GetAll()
//.ToList()新建SelectListItem
{
Value=x.Id.ToString(),
Text=x.名称
});
希望这能对公共类城市存储库有所帮助
public class CitiesRepositoryEF: ICitiesRepository
{
    public IEnumerable<City> GetAll() // <-- Generic of type City
    {
        using (var ctx = new LocationEntities())
        {
            return ctx.usp_GetAllCities().ToList(); // <-- Generic of type (result of usp_GetAllCities)
        }
    }
}
{
public IEnumerable GetAll()//何时出现错误?当我尝试编译Mymodel.cs“无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.IEnumerable'”时,出现以下错误。能否显示usp_GetAllCities()的代码?感谢您的回复。我已更改了您提到的代码,但仍然出现以下错误。“无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”。我是否必须在从数据库获取存储过程的.edmx文件的模型浏览器中进行任何更改?-谢谢,我的存储过程的名称是usp_GetAllCities()。我在模型浏览器中创建了一个复杂类型,并将其命名为usp_GetAllCities_Result。