0

我有以下情况。

  1. 我的 Edit/Employee 视图填充了来自 Entity Framework 实体 (Employee) 的模型
  2. 我从 Edit/Employee 发布到 Save/Employee 控制器操作。Save/Employee 操作需要另一种类型 (EmployeeSave),它具有 Employee 作为属性

这是编辑/员工方法

    public ActionResult Edit(EmployeesEdit command)
    {
        var employee = command.Execute();
        if (employee != null)
        {
            return View(employee);
        }
        return View("Index");
    }

这是保存/员工方法

  public ActionResult Save(EmployeesSave command)
    {
        var result = command.Execute();
        if (result)
        {
            return View(command.Employee);
        }
        return View("Error");
    }

这是 EmployeeSave 类

public class EmployeesSave
{
    public bool Execute()
    {
        // ... save the employee   
        return true;

    }
    //I want this prop populated by my model binder
    public Employee Employee { get; set; }  
}

MVC DefaultModelBinder 能够解析 Employee 和 EmployeeSave 类。

4

2 回答 2

1

您可能需要在BindAttribute这里使用。如果您的视图包含像这样命名的属性EmployeeSaveViewModelEmployee我编造了属性名称)

<input type="text" name="EmployeeSaveViewModel.Property1" />
<input type="text" name="EmployeeSaveViewModel.Employee.Name" />
<input type="text" name="EmployeeSaveViewModel.Employee.SomeProperty" />

然后,您的操作可能如下所示:

[HttpPost]
public ActionResult Save([Bind(Prefix="EmployeeSaveViewModel")] 
                         EmployeeSaveViewModel vm)
{
    if(ModelState.IsValid)
    {
        // do something fancy
    }

    // go back to Edit to correct errors
    return View("Edit", vm);
}
于 2011-08-11T12:09:14.547 回答
0

您可以通过将编辑后的数据传递回处理 HttpPost 的 Edit 操作来解决它。在内部创建 EmployeeSave 对象并为其 Employee 属性分配返回给您的 Edit 操作的 Employee 值。通过传递 EmployeeSave 对象调用 Save 操作。

[HttpGet]
public ActionResult Edit()
{
    return View();
}

[HttpPost]
public ActionResult Edit(Employee employee)
{
    EmployeeSave employeeSave = new EmployeeSave { Employee = employee };

    return View("Save", employeeSave);
}

另一种方法是使用 EmployeeSave 而不是 Employee 作为您的模型。

于 2011-08-11T11:42:17.520 回答