更新实体模型时,客户端ID为0

时间:2012-04-27 14:40:40

标签: c# linq entity-framework linq-to-entities

查看

@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?

2 个答案:

答案 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)。

如果您再看一下代码,我肯定会跟踪问题。