我有一个使用实体框架作为模型层的 MVC3 应用程序。
在 EmployeeController 中,我有:
public ActionResult GetEmployeeEdit(String id)
{
// Get the desired Employee
var model = GetEmployees().FirstOrDefault(o=>o.EFolderid == id);
return View("EmployeeEdit", model);
}
private IQueryable<Employee> GetEmployees()
{
// Returns IQueryable<Employee>
return _employeeService.GetTable();
}
在 EmployeeEdit 我有:
@model Metastorm.Domain.Models.Employee
@{
ViewBag.Title = "Employee Edit";
}
@using (Html.BeginForm("SaveEmployee", "Employee", FormMethod.Get, Model))
{
<fieldset>
<legend>Edit Employee</legend>
<br />
@Html.Label("firstName", "First Name: ")
@Html.EditorFor(o => @Model.NameFirst)
<br />
@Html.Label("lastName", "Last Name: ")
@Html.EditorFor(o => @Model.NameLast)
</fieldset>
<br />
<input class="button" id="submit" type="submit" value = "Save Employee" />
}
现在回到 EmployeeController:
[HttpGet]
public ActionResult SaveEmployee(Employee employee)
{
if (ModelState.IsValid)
{
// Get the Employee Model again from Entity, Update and save
// Unfortunately, the employee object's FolderId value is null
}
// Just getting a model to satisfy the function
var model = GetEmployees().FirstOrDefault();
return View("EmployeeEdit", model);
}
我遇到的问题是员工对象上的所有属性都是空的,除了 Employee.NameFirst 和 Employee.NameLast,它们恰好是使用 Html.EditorFor 在视图中公开的属性。
总之,我得到了一个 Employee 模型对象,它是完全水合的。我将此模型从控制器传递到视图。在视图中,允许更新选定的字段。然后将 Employee 模型传递回持久更新的控制器。
我的问题是如何保持最初从 Controller 传递到 View 的 Employee 模型完好无损。换句话说,我想要模型