ASP.NET MVC 4 Razor编辑选定列表项

时间:2013-07-12 13:27:44

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

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

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

我需要在运行时获取列表框选中的项ID,以便在actionlink中提供它。

控制器:

    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);
        }
    }

我无法获得正确的网址:

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

1 个答案:

答案 0 :(得分: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)

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