Strongly-typed binding to a DropDownListFor?

﹥>﹥吖頭↗ 提交于 2019-12-19 02:46:29

问题


Normally I would bind data to a DropDownListFor with a SelectList:

@Html.DropDownListFor(model => model.CustomerId, new SelectList(Model.Orders, "OrderId", "ItemName"))

Is there any way to do this through strongly-typed lambdas and not with property strings. For example:

@Html.DropDownListFor(model => model.CustomerId, new SelectList(Model.Orders, x => x.OrderId, x => x.ItemName))

回答1:


You could create the select list itself in the controller and assign it to a property in your view model:

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

The code in your controller will look like this:

model.OrdersList = db.Orders
                     .Select(o => new SelectListItem { Value = o.OrderId, Text = o.ItemName })
                     .ToList();

In the view you can use it like this:

@Html.DropDownListFor(model => model.CustomerId, Model.OrderList)

I personally prefer this approach since it reduces logic in your views. It also keeps your logic 'stronly-typed', no magic strings anywhere.




回答2:


There doesn't appear to be an overloaded constructor to allow for this. But there's no harm in manually specifying the DataTextField and DataValueField as a string is there?




回答3:


for that u can use a ViewBag for storing a data into your Drop Down Control

here is an example of it ..............

@Html.DropDownList("department", (IEnumerable<SelectListItem>)@ViewBag.DepartmentList, new { value = @ViewBag.department, style = "width:140px", onchange = "OnDepartmentChange(this)" })

in controller in Index method you can write like

 ViewBag.Department = department;



回答4:


When we use strongly typed views, we can use the @Html.DropDownListFor() method. This helper method will need the list of departments to first populate the dropdown and then set the employee’s department id passed in model object as selected item.

    public ActionResult edit(int id)
{
    Employee emp = db.Employees.Where(e => e.EmployeeId == id).FirstOrDefault();
    ViewBag.DepartmentListItems = db.Departments.Distinct().Select(i => new SelectListItem() { Text = i.DepartmentName, Value = i.DepartmentId.ToString() }).ToList();
    return View(emp);
}

The list items in view bag will be used to bind the dropddownlist and html helper will set the DepartmentId based on the Employee model passed to the view. View Code below.

@Html.DropDownListFor(model => model.DepartmentId, ViewBag.DepartmentListItems as IEnumerable<SelectListItem>,"Select")


来源:https://stackoverflow.com/questions/20419957/strongly-typed-binding-to-a-dropdownlistfor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!