2015-10-18 217 views
0

我想使用下拉列表,问题是所选项目总是添加的第一个项目。并且控制器中设置的选定属性完全忽略。Dropdownlist总是选择第一个项目,而不管选定属性(ASP.NET MVC)

也许我错过了一些基本的东西,但我没有看到代码中没有错。

Ho wever我可以看到生成的HTML代码不显示选定的属性。

你们是否在下面的代码中发现任何错误?

控制器

public ActionResult Index() 
     { 

      HomeModel model = new HomeModel(); 
      List<SelectListItem> ddlItems = new List<SelectListItem>(); 
      SelectListItem Opt1 = new SelectListItem { Text = "Opt1", Value = "1" }; 
      SelectListItem Opt2 = new SelectListItem { Text = "Opt2", Value = "2", Selected = true }; 
      ddlItems.Add(Opt1);//The first item added is always the selected one 
      ddlItems.Add(Opt2); 
      model.DDL = ddlItems; 
      return View("Index", model); 
     } 

型号

public class HomeModel 
    { 
     public List<SelectListItem> DDL { get; set; } 

    } 

查看

@Html.DropDownListFor(m => m.DDL, Model.DDL, new { id = "ddlId"}) 

生成的HTML

<select name="DDL" id="DDL"> 
    <option value="1">Opt1</option> 
    <option value="2">Opt2</option> 
</select> 

回答

1

无法将<select>绑定到复杂对象(在您的案例中为List<SelectListItem>)。你的模型需要的属性

public class HomeModel 
{ 
    public int SelectedItem { get; set; } 
    public List<SelectListItem> DDL { get; set; } 
} 

和你的方法是

public ActionResult Index() 
{ 
    HomeModel model = new HomeModel() 
    { 
     SelectedItem = 2, // set the default selection 
     DDL = new List<SelectListItem> 
     { 
      new SelectListItem { Text = "Opt1", Value = "1" }, 
      new SelectListItem { Text = "Opt2", Value = "2" } 
     } 
    }; 
    return View(model); // no need for the view name 
} 

注意,没有点设置的SelectListItemSelected属性,当您绑定到一个模型(这是该属性的值决定选择什么)

那么你的观点会

@Html.DropDownListFor(m => m.SelectedItem, Model.DDL) 
+0

你好Stephen Muecke,这确实有效!但我宁愿不使用SelectedItem属性,因为它不太直观。谢谢! – Nelssen

+0

不知道你的意思是_less_直觉_它的方式'DropDownListFor()'的作品 - 第一个参数是你绑定的属性的值,第二个参数是用于生成选项的集合。 –

+0

不那么直观,因为您绑定到selectedItem属性而不是绑定模型集合。使用选定的属性会更容易理解。但如果我理解得很好,我只能通过Dropdownlist实现这一点(无需绑定),对吧? – Nelssen

相关问题