2012-01-20 12 views
4

コントローラのアクションが2回実行されています。 Fiddlerは2つの要求と応答を示し、最初のものは「セッションがクライアント、Fiddler、またはServerによってアボートされた」ことを示すアイコンがあります。サブミット時にアクションが2回実行される

しかし、私はこれがどこで起こっているのか、それはなぜか分かりません。

@{ using (Html.BeginForm("ConfirmThing", "Thing", null, FormMethod.Get, new { id = "frmGo" })) 
    { 
     @Html.HiddenFor(model => model.ThingID) 
    <button id="btnGo"> 
     Thing is a Go - Notify People</button> 
    } 
} 

btnGoためのJavascriptを次のようになります:

$("#btnGo").click(function() { 
     var form = $("#frmGo"); 
     form.submit(); 
    }); 

私はこのようになりますビューのセクション(ThingFinancials)を持っている:ここでは

は仕様ですアクションは、次のようになります。

public ActionResult ConfirmThing(int thingID) 
    { 
     [do some database stuff] 
     [send some emails] 

     var financials = GetFinancials(thingID); 
     return View("ThingFinancials", financials); 
    } 

珍しいことは、表示されるURLが[Website]/Thing/ThingFinancials/47で始まり、提出後にURLが[Website]/Thing/ConfirmThing?ThingID=47となることです。

(アクション名が表示名と一致しない理由を迷っている場合はThingFinancials上に複数のフォームタグがあるので、それはだ、と彼らはすべて同じアクション名を持つことができません。)

されていますその背後で起こっているServer.Transfer、またはそれのようなもの?

+0

FormMethod.Get投稿をしないでください。 –

+0

@BryanNaegele私はそれを両方の方法で試しました。この問題は両方とも解決されています。 –

答えて

4

あなたはその後、送信ボタンを使用している場合はJavaScriptを使用して提出するとき、あなたはそれ以外の場合は、あなたがそれを2回提出する、デフォルトの動作をキャンセルする必要があります。これを試してください:

+0

それはそれでした!

+0

助けてくれてうれしいです。 :-) –

1

int thingIDは、リクエストにとどまるクエリ文字列パラメータです。 ActionResult ConfirmThing(int thingID)の最後には、ビューを返すだけです。きれいなURL([Website]/Thing/ThingFinancials/47)が表示される場合は、以下の変更を行うことができます。

public ActionResult ConfirmThing(int thingID) 
    { 
     [do some database stuff] 
     [send some emails] 

     // This logic is probably in the 'ThingFinancials' action 
     // var financials = GetFinancials(thingID); 

     // I'll assume we're in the same controller here 
     return RedirectToAction("ThingFinancials", new { thingID }); 
    } 
+0

これは間違いなくよりクリーンな方法です。しかし、私はまだConfirmThingが2回実行されているという問題を抱えています。私が見ることができた理由はありません。 –

0

jqueryイベントのため、これはjqueryイベントにstopImmediatePropagation()を追加するだけです。

$("#btnGo").click(function (event){ 
event.stopImmediatePropagation(); 
}); 
関連する問題