【问题标题】:Select selected value in drop down list在下拉列表中选择选定的值
【发布时间】: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: E​​nums.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


【解决方案1】:

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

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

请注意,GetDepartmentDropDownList() 方法中不需要您的参数。在内部,DropDownListFor() 方法构建一个新的IEnumerable&lt;SelectListItem&gt; 并根据您绑定到的属性设置每个SelectListItemSelected 值(即在SelectList 构造函数中设置它被忽略)。

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-05-11
    相关资源
    最近更新 更多