2017-05-31 65 views
0

选择选定值我有一个enum它看起来像在下拉列表中

public enum Department 
{ 
    Admin, 
    HR, 
    Marketing, 
    Sales 
} 

从这个我想在控制器中创建一个下拉列表,我不喜欢它

public SelectList GetDepartmentDropDownList(string departmentName = null) 
{ 
    var departments = Enum.GetValues(typeof(Department)); 
    SelectList ddl = new SelectList(departments); 

    return ddl; 
} 

这工作正常。但正如你所看到的,我可以传递选项参数。当下拉值被保存到数据库并且用户回来编辑该部分时,将传入此可选参数。我试图实现的是用户最初选择的任何内容,当他们回到编辑屏幕时,选择特定项目,即,如果他们选择HR,则他们应该选择HR

如果我做new SelectList(departments, departmentName, departmentName);我得到以下错误:

DataBinding: Enums.Department' does not contain a property with the name 'HR'

有人建议如何实现这一目标吧。

在我使用的Html.DropDownListFor()使视图

@Html.DropDownListFor(m => m.Department, Model.DepartmentDdl, "Please select a Department", new { @class = "form-control", @required = "required" }) 

在我的模型的属性是

public IEnumerable<SelectListItem> DepartmentDdl { get; set; } 

和Controller创建动作我做

model.DepartmentDdl = GetDepartmentDropDownList(); 

而且在控制器编辑动作中,我做了

model.DepartmentDdl = GetDepartmentDropDownList(departmentName); //department name here is read from the db 
+0

它的绑定的属性值决定了选择的内容。显示你的视图和你绑定的属性(你需要将它设置在模型中,然后传递给视图) –

+0

只需在GET方法中将'Department'的值设置为'Department.HR',它将会选中(在'GetDepartmentDropDownList()'方法中你的参数没有意义) –

+0

可能重复[SO答案](https://stackoverflow.com/questions/21878673/html-enumdropdowndownlistfor-showing-a-default-text) ? –

回答

1

模型绑定通过绑定到您的属性的值工作。你需要你通过模型视图之前设置的属性Department值在GET方法,例如

var model = new YourModel 
{ 
    Department = Department.HR, 
    DepartmentDdl = GetDepartmentDropDownList() 
}; 
return View(model); 

注意,没有必要在GetDepartmentDropDownList()方法的参数。在内部,DropDownListFor()方法建立一个新的IEnumerable<SelectListItem>并根据您绑定到的属性(即将其设置在SelectList的构造函数中将被忽略)设置每个SelectListItemSelected值。