0

我正在视图中的列表框中显示我的模型对象列表。
当我在列表框中选择特定项目并单击编辑时,我想编辑该特定模型对象。
看法 :

    @Html.ListBox("Employees", (IEnumerable<SelectListItem>)ViewBag.EmployeesList )
    @Html.ActionLink("Edit", "Edit", new { id=????})

我需要在运行时获取列表框选定项 id 以在操作链接中提供它。

控制器 :

    public ActionResult Index()
    {
      var Employees= db.Employees;
      ViewBag.EmployeesList = new SelectList(Employees, "EmployeeID", "EmployeeName");
      return View();
    }

    public ActionResult Edit(int id)
    {
      Employee employee = db.Employees.Find(id);
      return View();
    }

    [HttpPost]
    public ActionResult Edit(Employee emp)
    {
        try
        {
            // TODO: Add update logic here
            if (ModelState.IsValid)
               db.Entry(emp).State = EntityState.Modified;             
             db.SaveChanges();                   
             return RedirectToAction("Index");
        }
        catch
        {
            return View(emp);
        }
    }

我无法获得正确的 URL,例如:

http://127.0.0.1:81/Employee/Edit/1
4

1 回答 1

0

列表框可以有多个选定项,因此您需要在模型中创建两个列表。

像这样的东西:

public class EmployeeViewModel
{
    public string[] SelectedEmployeesList { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

第一个用于所选项目,第二个用于列表中的项目。

在您的 Edit get 方法中,您需要设置模型列表项并将其返回到视图,即

public ActionResult Edit(int id)
{
  var model = new EmployeeViewModel();
  Employee employee = db.Employees.Find(id);
  var model = new EmployeeViewModel
    {
        Items = new SelectList(new[]
        {
            new SelectListItem { Value = "1", Text = "Employee 1" },
            new SelectListItem { Value = "2", Text = "Employee 2" },
        }, "Value", "Text")
    };
  model.SelectedEmployeeList = new [] {1};
  return View(model);
}

在您看来,它将是这样的:

Html.ListBoxFor(model => model.SelectedEmployeeList, Model.Items)

抱歉,我没有时间检查此代码是否有错误,希望它对您有用。

于 2013-07-12T14:51:18.580 回答