我在视图中的列表框中显示我的模型对象列表。
当我在列表框中选择特定项目并单击编辑时,我想编辑该特定模型对象
查看:
@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
答案 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)
抱歉,我没有时间检查此代码是否有错误,希望它适合您。