2013-11-23 163 views
3

环境ASP.net MVC5 +实体框架代码优先ASP.NET MVC DROPDOWNLIST不选择值

public class Vender 
{ 
    public int VenderID { get; set; } 


    public string VenderCode { get; set; } 


    public string CompanyCode { get; set; } 


    public string CompanyFullName { get; set; } 


    public string CreateUser { get; set; } 


    public int VenderCityId { get; set; } 

} 

对于VenderCityId喜欢另一类 “城市”,它具有ID和名称

我有一个VenderViewModel

public class VenderViewModel 
{ 

    public Vender Vender; 

    public VenderViewModel(IVenderRepository _venderRepository,int? Id) 
    { 
     if (Id==null) 
     { 
      Vender = new Vender(); 
     } 
     else 
     { 
      Init(_venderRepository, Id); 
     } 
    } 

    private void Init(IVenderRepository _venderRepository, int? Id) 
    { 
     Vender = _venderRepository.GetVenderById(Id); 

    } 


    public IEnumerable<SelectListItem> CityItems 
    { 
     get 
     { 
      IEnumRepository cityEnumRepository=new EnumRepository(new MasterDataContext()); 
      IEnumerable<City> _city = cityEnumRepository.GetAll<City>(); 

      var allCitys = _city.Select(m => new SelectListItem 
      { 
       Value = m.Id.ToString(), 
       Text = m.Name 

      }); 
      //return allCitys; 
      return DefaultCity.Concat(allCitys); 
     } 
    } 

    public IEnumerable<SelectListItem> DefaultCity 
    { 
     get 
     { 
      return Enumerable.Repeat(new SelectListItem 
      { 
       Value = "-1", 
       Text = "Select a City" 
      }, count: 1); 
     } 
    } 

这里是关于控制器,只是简单的

public ActionResult Edit(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     //Vender vender = _venderRepository.GetVenderById(id); 
     VenderViewModel vm = new VenderViewModel(_venderRepository, id); 
     if (vm.Vender == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(vm); 
    } 

从调试中,我可以确认此视图模型具有VenderCityId的值。

最后认为:

@Html.DropDownListFor(model => model.Vender.VenderCityId, Model.CityItems) 

的问题是下拉列表无法显示正确的项目。加载后没有选择项目。

+0

我只是注入存储库。它不能解决这个 – Ling

回答

2

你需要加入这个内CityItems选择ID:

Selected = VenderID.Equals(x.Key) 

当你填入你的SelectList做这样的:

var allCitys = _city.Select(m => new SelectListItem 
      { 
       Value = m.Id.ToString(), 
       Text = m.Name, 
       Selected = VenderID.Equals(m.Id.ToString()) 

      }); 

你的HTML辅助然后改成这样:

@Html.DropDownListFor(model => model.Vender.VenderCityId, Model.CityItems, "Please select ") 

这将使用强类型对象而不是使用ViewBag

+0

我不理解它?你为什么认为添加optionlabel会解决这个问题?我只是尝试它,它不起作用 – Ling

+0

我认为它是选择错误的超载。它有用吗? – hutchonoid

+0

它不起作用 – Ling