4

コントローラーでアクションを呼び出すビューに次のアクションリンクがあります。

@Html.ActionLink("Send Request", "SendRequest", new { id = item.CertificateId })

リンクをクリックすると、次の URL が生成されます。

http://localhost:61742/Controller/SendRequest/17

更新を押すと、同じアクションが再度呼び出され、テーブルに重複行が挿入されます。アクションへの重複呼び出しを防ぐ方法はありますか、またはテーブルに行を挿入する前にチェックを追加する必要がありますか?

HttpPost アクションを呼び出すようにビューを変更しようとしましたが、それも更新時に再度呼び出されます。

4

2 に答える 2

4

この問題は、更新しようとしているページが Do Action (SendRequest) ページであるという事実によるものです。

アクションで、元のページまたは「送信していただきありがとうございます」ページへのリダイレクトを返すことをお勧めします。

SendRequest アクションでこれを行うことができます (そのままにしておく必要がありますHttpPost)。次に例を示します。

[HttpPost]
public ActionResult SendRequest(int id)
{
    //Do you Send Request logic here

    //Redirect the user to another page once complete
    return RedirectToAction("Thanks");
}

これにより、ユーザーは次のような URL に移動します。http://localhost:61742/Controller/Thanks/

もちろん、ユーザーはブラウザの「戻る」ボタンを押して SendRequest URL に戻ることもできます。そのため、エントリの重複を防ぐために、できるだけ多くのサーバー側の検証を行うことをお勧めします。ただし、それ以外に、ユーザーが「リクエストの送信」リンクを複数回クリックすることを選択した場合にできることはあまりありません。

于 2013-09-16T09:55:00.143 に答える
0

まず、Action を で装飾する場合[HttpPost]、ブラウザは少なくとも「更新」(データの再投稿) の前にユーザーに警告する必要があります。

通常、リダイレクトは問題に対する最も簡単な解決策です。例えば:

 [HttpPost]
 public ActionResult SendRequest(int id)
 {
     ....

     return Redirect("some_url");
 }
于 2013-09-16T09:55:27.163 に答える