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) {

    }
};

あなたの場合、inputClientIdにちなんで名付けられたフィールドを含むフィールドがあることを確認して、サーバーにそのように投稿されるようにする必要があります。

<input type="hidden" id="clientId" name="clientId" value="1" />

さらに、Fiddler2をインストールし、それを使用して実際にサーバーに投稿されているデータを監視すると便利な場合があります。この種のことを扱うとき、それはかけがえのないものです。

于 2012-04-27T15:26:11.837 に答える
0

uから提供された情報はあまりありませんが、3つのケースでIDが0になる可能性があります。1.クライアント側でIDを生成または入力した場合、uはそれを適切に投稿しませんでした。非表示の入力がありません、変数名が間違っています。2.モデルコンストラクターでurIを生成する場合は、デフォルトのコンストラクターが呼び出されることに注意してください。次に、プロパティを新しい値で上書きします。idプロパティを見て、着信値をブロックまたは上書きできるものがあります。3.データベースレベルでIDを生成する場合、新しいオブジェクトを作成するときにデータベースがIDを返さないことを知っておく必要があります。これはよくある問題ですが、あまり経験がありません(アプリケーションのビジネスロジックでIDを生成します)。

あなたがあなたのコードをもう一度見るなら、私はあなたが問題を追跡すると確信しています。

于 2012-04-28T19:45:57.257 に答える