查看 的
@using (Html.BeginForm("UpdateClient", "Client")) {
的控制器 的
[HttpPost]
public ActionResult UpdateClient(Client client)
{
if (ModelState.IsValid) {
bool ret = _clientRepository.UpdateClient(client);
return RedirectToAction("Index", "Home");
}
return View(client);
}
的存储库 的
public bool UpdateClient(Client client)
{
using (var context = new Entities()) {
context.AttachTo("Clients",client);
context.ObjectStateManager.ChangeObjectState(client, EntityState.Modified);
context.SaveChanges();
}
return true;
}
当我在控制器中调用UpdateClient时,客户端ID为0.如何传递我更新的ID?
答案 0 :(得分:0)
当您从客户端代码(即浏览器)调用UpdateClient方法时,您需要确保将要设置的字段发回给接收页面。
例如,我经常使用jQuery和一个简单的ajax调用将数据发布回服务器。帖子需要包含Client对象的匹配值:
$.post("/controller/UpdateClient", {
"clientId": 1,
"otherProp1": "some value",
"otherProp2": "some value 2"
}, function (data) {
}
};
在您的情况下,您可能需要确保您的input
字段包含一个以ClientId命名的字段,以便以这种方式发布到服务器:
<input type="hidden" id="clientId" name="clientId" value="1" />
此外,您可能会发现安装程序Fiddler2很有用,并使用它来观察实际发布到服务器的数据。在处理这类事情时,这是非常宝贵的。
答案 1 :(得分:0)
你给我们的信息不多,但你的身份在3例中可以是0。 1.如果您在客户端生成或输入id,则只是没有正确发布。错过了隐藏的输入,错误的变量名称。 2.如果你在模型构造函数中生成ur,你应该记住LL是默认的构造函数。然后它将用新值覆盖其属性。看看你的id属性是否存在可以阻止或覆盖传入值的东西。 3.如果您在数据库级别生成Id,那么您应该知道数据库在创建新对象时不返回id。 这是一个常见问题,但我对它不是很有经验(我们在应用程序的业务逻辑中生成id)。
如果您再看一下代码,我肯定会跟踪问题。