更新表单元素

时间:2011-10-20 19:17:45

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller

我在详情视图中有这个:UI Snapshot

此详细信息来自上一页。现在我想将更改的元素保存回DB。我怎么做?我在我的家庭控制器类上有这个:

   [HttpPost]
    public ActionResult UpdateItem (Employee model)
    {
        var getEmployee = storeDB.Employees.SingleOrDefault( c=>c.Id == model.Id);
        getEmployee.Name = model.Name.ToString();
        getEmployee.Address = model.Address.ToString();
        storeDB.Employees.Add(model);
        storeDB.SaveChanges();
        return RedirectToAction("Index");
    }

但这是在我的模型类中。我如何链接?

3 个答案:

答案 0 :(得分:1)

您必须将Action作为HttpPost,然后发布表单内容,根据表单数据构建对象,然后保存它们。

答案 1 :(得分:1)

使用模型或FormCollection

参数在Action方法上使用HttpPost

如果您只传递填充了值的模型,则模型参数会更好。

[HttpPost]
public ActionResult UpdateItem (Employee model){
//   save model here

return RedirectToAction("Index", "Home"); //something like this
}

最好为Employee使用单独的ViewModel。

答案 2 :(得分:1)

在您的操作中使用HttpPost属性。视图中的所有输入字段必须位于表单内,否则数据将不会发送到操作。完成设置后,您可以使用视图中使用的相同模型将员工的数据发送到您的操作中。例如:

[HttpPost]
public ActionResult UpdateItem (Employee model)
{
    ....
    getEmployee.Name = model.EmployeeName.ToString();
    getEmployee.Address = model.EmployeeAddress.ToString();
    ...
} 

如果只发送Id,则必须循环FormCollection并将“getEmployee”实体的属性设置为您在FormCollection中接收的值。

像这样:

getEmployee.Name = FormCollection["EmployeeName"].ToString();
getEmployee.Address = FormCollection["EmployeeAddress"].ToString();
...

等等。显然,Name和Address是Employees对象属性的名称。

您使用的是EntityFramework吗?如果是这样,只需调用“storeDB”的SaveChanges()方法即可。如果没有,您必须调用您正在使用的数据访问的保存方法。希望它有所帮助。