2012-02-16 1 views
1

を呼び出す使用:形で2つのボタン私はページ上のフォームを持っているさまざまなアクション

public ActionResult Recalculate(FormCollection form) 
{ 
var price = RecalculatePrice(form); 
... do some price recalculation based on the inputs 
return PartialView("PriceRecalculation",price); 
} 
:私は、次のアクションを呼び出すことにしたい「再計算価格」ボタンをクリックすると

@using(Html.BeginForm("DoReservation","Reservation")) 
{ 
...some inputs 
<button id="recalculate">Recalculate price</button> 
<button id="submit">Submit</button> 
} 

「送信」ボタンをクリックすると、「DoReservation」アクションが呼び出されます(フォームを送信します)。 どうすればいいですか?

+0

可能重複http://stackoverflow.com/questions/442704/how-do-you-handle- asp-net-mvc-frameworkの複数送信ボタン) – JasCav

+0

@JasCavはそれが重複していることについては正しいと思います。別のオプションは、jqueryを使用してボタンのクリックに添付して、フォームアクションを提出する前に書き直すことです。 –

+0

@TrevorPilley - あなたは正しいです、あなたはそれを行うことができます。しかし、あなたはJavaScriptに頼っています(通常は公平ですが、必ずしも保証されません)。重複してリンクされた方法は、すべての場合に有効です。 – JasCav

答えて

0

私が提案できるのは、ビューモデルに新しいプロパティを追加し、それをActionTypeと呼ぶことです。

public string ActionType { get; set; } 

、あなたは何をすべきかを決定することができ、その後ACTIONTYPE値に基づいて、ポストアクションメソッドに

@using (Html.BeginForm()) 
    { 
     <div id="mytargetid">  
       ...some inputs*@ 
     </div> 
     <button type="submit" name="actionType" value="Recalculate" >Recalculate price</button> 
     <button type="submit" name="actionType" value="DoReservation" >Submit</button> 
} 

以下のようなあなたのCSHTMLファイルを変更!

私はあなたのコメントにあなたが部分図やJavaスクリプトを返すために、部分的に戻って、何の問題は、あなたが

@using (Ajax.BeginForm("DoProcess", new AjaxOptions { UpdateTargetId = "mytargetid", InsertionMode = InsertionMode.Replace })) 

を使用することはできませんし、コントローラにあなたの行動を変更する場合は、部分的に戻って交換する必要が言及したことに気づきましたコードはページリダイレクトするように

public ActionResult DoProcess(FormModel model) 
     { 
      if (model.ActionType == "Recalculate") 
      { 
       return PartialView("Test"); 
       } 
      else if (model.ActionType == "DoReservation") 
      { 
       return JavaScript(string.Format("document.location.href='{0}';",Url.Action("OtherAction"))); 


      } 
      return null; 
     } 
[あなたはASP.NET MVCフレームワークでは、複数の送信ボタンを処理するにはどうすればよい?](の
+0

@Azadah Khojandiはあなたの答えをありがとう - しかし、私は "再計算"アクションだけが部分的なビューを返し、特定のdivの内容を置き換えます。 2番目のアクションは、いくつかのビューにリダイレクトする必要があります。まあ、一般的に、両方のアクションから部分的なビューが返されるように動作することもできますが、異なるdivを置き換える必要があります。 –

+0

@niao ajax呼び出しの別のページにリダイレクトするには、return JavaScriptを使用できます(string.Format( "document.location.href = '{0}';"、Url.Action( "About"))); –

関連する問題