2013-05-07 81 views
2

我是MVC的新手,我試圖在同一頁面上綁定多個下拉列表,因此我可以從每個下拉列表中選取值並使用它來搜索數據庫。我的代碼給了我一個無限循環。任何人都可以告訴我我做錯了什麼,或者推薦一個更好的方法來實現這個目標?MVC Multiple DropDownLists on one page?

型號

public class SelectViewModel 
    { 

     public SelectList MakeList { get; set; } 
     public SelectList ColorList { get; set; } 
    } 

控制器

public ActionResult Index() 
     { 
      SelectViewModel objSelectModel = new SelectViewModel(); 
      List<Make> objMake = new List<Make>(); 
      List<Color> objColor = new List<Color>(); 

      objMake = GetMakeList(); 
      SelectList objBindMake = new SelectList(objMake, "MakeID", "Make1", 0); 

      objColor = GetColorList(); 
      SelectList objBindColor = new SelectList(objColor, "ColorID", "Color1", 0); 

      objSelectModel.MakeList = objBindMake; 
      objSelectModel.ColorList = objBindColor; 

      return View(objSelectModel); 
     } 



     public List<Make> GetMakeList() 
     { 
      var query = from m in makeRepository.Makes 
         select m; 
      var makes = query.ToList(); 
      return makes; 
     } 

     public List<Color> GetColorList() 
     { 
      var query = from c in colorRepository.Colors 
         select c; 
      var colors = query.ToList(); 
      return colors; 
     } 

查看

@model MvcApplication1.WebUI.Models.SelectViewModel 
    Make : @Html.DropDownList("Make", new SelectList(Model.MakeList, "Value", "Text", Model.MakeList.SelectedValue)) 

    Color: @Html.DropDownList("Color", new SelectList(Model.ColorList, "Value", "Text", Model.ColorList.SelectedValue)) 
+0

「無限循環」究竟是什麼意思?怎麼了?你怎麼知道這是一個無限循環?我看不出任何明顯的代碼錯誤。 – 2013-05-07 15:24:34

+0

你有沒有嘗試過放入一個斷點並逐步完成源代碼? – Leniency 2013-05-07 15:27:04

+1

唯一明顯不正確的部分是將SelectList從SelectList中取出,但不應該導致無限循環 - 這只是沒有必要的。 – 2013-05-07 15:29:03

回答

0
//Model 
public class SelectViewModel 
    { 
     public string MakeId { get; set; } 
     public string ColorId { get; set; } 
     public IEnumerable<SelectListItem> MakeList { get; set; } 
     public IEnumerable<SelectListItem> ColorList { get; set; } 
    } 

//Controller 
     public PartialViewResult Index() 
     { 

      var query = makeRepository.Makes.Select(c => new SelectListItem 
      { 

       Value = SqlFunctions.StringConvert((double)c.MakeID), 
       Text = c.Make1, 
       Selected = c.MakeID.Equals(3) 
      }); 

      var query1 = colorRepository.Colors.Select(c => new SelectListItem 
      { 

       Value = SqlFunctions.StringConvert((double)c.ColorID), 
       Text = c.Color1, 
       Selected = c.ColorID.Equals(3) 
      }); 

      var model = new SelectViewModel 
      { 
       MakeList = query.AsEnumerable(), 
       ColorList = query1.AsEnumerable() 
      }; 
      return PartialView(model); 
     } 

     [HttpPost] 
     public ActionResult Index(SelectViewModel model) 
     { 
      // here you can get the selected values 
      return Content("Thanks for selecting make id: " + model.MakeId + "and color id:" + model.ColorId); 
     } 

//View 
@model MvcApplication1.WebUI.Models.SelectViewModel 
@using (Html.BeginForm()) 
{ 
@Html.DropDownListFor(m => m.MakeId, Model.MakeList, "--Select One--") 
    @Html.DropDownListFor(m => m.ColorId, Model.ColorList, "--Select One--") 
<input type="submit" value="Search" /> 
}