0

看法

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

4

2 回答 2

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 并使用它来查看实际发布到服务器的数据很有用。在处理这类事情时,这是无价的。

于 2012-04-27T15:26:11.837 回答
0

您给我们的信息不多,但您的 id 在 3 种情况下可能为 0。1. 如果您在客户端生成或输入 id,您只是没有正确发布它。错过了隐藏的输入,错误的变量名。2. 如果您在模型构造函数中生成您的 Id,您应该记住,将调用默认构造函数。然后它将用新值覆盖其属性。查看您的 id 属性是否有可以阻止或覆盖传入值的东西。3. 如果您在数据库级别生成 Id,那么您应该知道数据库在创建新对象时不会返回 id。这是一个常见问题,但我对此不是很有经验(我们在应用程序的业务逻辑中生成 id)。

如果你再看看你的代码,我肯定会跟踪问题。

于 2012-04-28T19:45:57.257 回答