【发布时间】:2017-05-31 09:53:31
【问题描述】:
我有一个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' 不包含名为“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; }
然后在控制器中创建我做的动作
model.DepartmentDdl = GetDepartmentDropDownList();
在控制器编辑操作中我做
model.DepartmentDdl = GetDepartmentDropDownList(departmentName); //department name here is read from the db
【问题讨论】:
-
它是您绑定的属性的值,它决定了选择的内容。显示您的视图和绑定到的属性(您需要在模型中设置它,然后再将其传递给视图)
-
只要在GET方法中将
Department的值设置为Department.HR,就会被选中(GetDepartmentDropDownList()方法中你的参数没有意义 -
SO Answer 可能重复?
-
@StephenMuecke 我已经尝试过你的建议,但仍然没有选择值。
-
@StephenMuecke 我已经得到它的工作,你介意把它写下来作为答案,我会接受它
标签: c# asp.net-mvc enums