C# 更新表单元素
我的详细信息视图中有以下内容: 此详细信息来自上一页。现在我想将更改的元素保存回DB。我该怎么做?我在我的家庭控制器类上有:C# 更新表单元素,c#,asp.net-mvc,asp.net-mvc-3,model-view-controller,C#,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,我的详细信息视图中有以下内容: 此详细信息来自上一页。现在我想将更改的元素保存回DB。我该怎么做?我在我的家庭控制器类上有: [HttpPost] public ActionResult UpdateItem (Employee model) { var getEmployee = storeDB.Employees.SingleOrDefault( c=>c.Id == model.Id); getEmployee.Name = mo
[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");
}
但这是在我的模型课上。我如何连接 您必须将
操作
作为HttpPost
发布表单内容,根据表单数据构建对象,然后保存它们 您必须将操作
作为HttpPost
发布表单内容,根据表单数据构建对象,然后保存它们 在带有参数model或FormCollection的Action方法上使用HttpPost
如果只传递填充了值的模型,则模型参数会更好
[HttpPost]
public ActionResult UpdateItem (Employee model){
// save model here
return RedirectToAction("Index", "Home"); //something like this
}
最好为员工使用单独的ViewModel 在带有参数model或FormCollection的Action方法上使用HttpPost 如果只传递填充了值的模型,则模型参数会更好
[HttpPost]
public ActionResult UpdateItem (Employee model){
// save model here
return RedirectToAction("Index", "Home"); //something like this
}
最好为员工使用单独的ViewModel 在操作中使用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()方法。如果没有,则必须调用正在使用的数据访问的save方法。希望有帮助。在操作中使用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()方法。如果没有,则必须调用正在使用的数据访问的save方法。希望有帮助。storeDB.Employees.Add(model);SaveChanges();storeDB.Employees.Add(模型);SaveChanges();编辑后,我不知道id是否存在,因为我们没有将id作为参数传递。那么我需要删除第一行吗?这是为了更新,所以假设您的模型有Id,您可能需要这样的第一行(c=>c.Id==model.Id)。谢谢Bipins。我更新了我的问题并添加了Id。我应该如何将此UpdateItem函数链接到“保存”按钮?您可以将此强类型模型和脚手架模板创建为“创建”,但您的视图似乎已经创建,它将创建必要的元素。基本上,输入元素应该由这个模型创建,并且应该使用http post将它发布到同一个操作。编辑之后,id将不存在,因为我们没有将id作为参数传递。那么我需要删除第一行吗?这是为了更新,所以假设您的模型有Id,您可能需要这样的第一行(c=>c.Id==model.Id)。谢谢Bipins。我更新了我的问题并添加了Id。我应该如何将此UpdateItem函数链接到“保存”按钮?您可以将此强类型模型和脚手架模板创建为“创建”,但您的视图似乎已经创建,它将创建必要的元素。基本上,输入元素应该由这个模型创建,并且应该使用HTTPPOST将其发布到同一个操作。谢谢Gabo。我编辑了我的问题,看一看。对我正在使用EF 4.1您是否正在更新或添加新条目?我知道您想要更新一行,所以“storeDB.Employees.Add(model);”不是必需的。如果这样做,可能会得到重复的行或异常,告诉您引用完整性不允许插入重复的行。仅当您要添加新行时才使用“storeDB.Employees.Add(model);”。是的,您是正确的。我想删除它,而不是向其中添加另一个重复行。然后从代码中删除“storeDB.Employees.add(model);”。还有一件事,在直接处理实体时使用storeDB.Employees.FirstOrDefault()。它应该会起作用。祝你好运对于带有HttpPost属性的操作,您的保存按钮应该是“提交”类型的“输入”。这将使您显式地发布到操作,在本例中为UpdateItem。在视图中使用助手,它应该为您提供设置按钮需要执行的操作的选项。干杯,谢谢加博。我编辑了我的问题,看一看。对我正在使用EF 4.1您是否正在更新或添加新条目?我知道您想要更新一行,所以“storeDB.Employees.Add(model);”不是必需的。如果这样做,可能会得到重复的行或异常,告诉您引用完整性不允许插入重复的行。仅当您要添加新行时才使用“storeDB.Employees.Add(model);”。是的,您是正确的。我想删除它,而不是向其中添加另一个重复行。然后从代码中删除“storeDB.Employees.add(model);”。还有一件事,在直接处理实体时使用storeDB.Employees.FirstOrDefault()。它应该会起作用。祝你好运对于带有HttpPost属性的操作,您的保存按钮应该是“提交”类型的“输入”。这将使您显式地发布到操作,在本例中为UpdateItem。在你的视图中使用一个助手,它会给你选择的权利