如何将选定的值(下拉列表)传递给控制器​​参数?

use*_*908 0 asp.net-mvc jquery asp.net-mvc-4 dropdownlistfor

我正在使用MVC 4(剃须刀).

我使用dropdownlist而不是dropdownlistFor,因为下拉列表可以通过从数据库中检索数据来显示所选值.所以我需要知道如何通过从dropdownlist到Action参数(Edit)中选择一个值而不使用dropdownlistfor model来传递值.有办法解决吗?我看到ViewModel的VmCarList为null.

的ViewModels

public IEnumerable<Cars> VmCarList { get; set; }
public CarData VmCarData { get; set; }
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpGet]
public ActionResult Edit(int id)
    {


        _viewModels.VmCarList = Repository.LoadAllCarNames();

        string selectedCar = (from car in _viewModels.CarList
                           where car.carId == id
                           select car.Name).First();

        ViewBag.CarNames = new SelectList(_viewModels.CarList, "CarName", "CarName", selectedCar);

        return View(_viewModels);
    }
Run Code Online (Sandbox Code Playgroud)

视图

    @model CarProgram.Models.ViewModels

    @Html.DropDownList("CarList", (SelectList)ViewBag.CarNames)
Run Code Online (Sandbox Code Playgroud)

调节器

    [HttpPost]
    public ActionResult Edit(int id, ViewModels data)
    {
        try
        {
            if (ModelState.IsValid)
            {
                var car = new CarData();
                UpdateModel(car);

                bool result = Repository.UpdateCar(car);
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jey*_*mov 5

如果使用@Html.DropDownList("CarList", (SelectList)ViewBag.CarNames),则应将CarListaction 添加为参数.或者,如果您想从模型中获取汽车价值,您应该使用DropDownListFor:

@Html.DropDownListFor(model => model.VmCarData, ViewBag.CarNames as IEnumerable<SelectListItem>, "-Select Car-", new { @id = "carDDL" })
Run Code Online (Sandbox Code Playgroud)