2013-08-17 19 views
11

表示される画像を切り替える次のボタンと前のボタンがあるページを作成したいとします。ASP.NET MVC:Ajax.BeginFormを使用した複数の送信ボタン

私はAjax.BeginFormを作成し、それに画像と2つの送信ボタンを挿入しました。

Ajax.BeginFormの中に複数の送信ボタンがありますか?

コントローラはどのようにそれぞれ別々に送信するのですか?

答えて

23

[HttpPost] 
     public ActionResult DYmanicControllerPage(RegisterModel model, string ButtonType) 
     { 
     if(ButtonType == "Next") 
     { 
      // Do Next Here 
     } 
     if (ButtonType == "Save") 
     { 
      //Do save here 
     } 
     return JavaScript("REturn anything()"); 

     } 
+0

このアクションで得たモデルは、ページの値を保持していません。それは自然ですか? – kroiz

+0

@kroiz申し訳ありません私はあなたが何をしようとしているのか理解できません。 – Jaimin

+0

ありがとうございますが、これはこれのための場所ではありません、私は新しい質問を開始します。上記のアクション "DYmanicControllerPage"、モデル "RegisterModel model"では、名前、アドレス、フォネノのようなフォームからデータを取得することになっていますか? – kroiz

7

私はあなたが2つのボタンがあり、その後、フォーム上のアクションを設定することができ、クリックされたものをボタンに依存することをお勧めします:

レイザー

$(function(){ 
    $("#btn-prev").click(function() { 
     $("#form").attr 
        (
         "action", 
         "@Url.Action("Action", "Controller", new {area="Area" })", 
        ).submit(); 
    }); 
    $("#btn-next").click(function() { 
     $("#form").attr 
        (
         "action", 
         "@Url.Action("Action", "Controller", new {area="Area" })", 
        ).submit(); 
    }); 
}); 

私が行うためにここにjQueryを使用していますしかし、私はあなたがそのアイデアを得ることができると思う。

+0

コントローラーの動作について少し詳しく説明できますか?私は1つの行動を取るべきですか?もしそうなら、前と次をどのように区別するのですか?また、アクションURLは何ですか?ありがとう。 – kroiz

+0

アクションは、フォームが投稿するURLです。オンザフライで変更すると、フォームが投稿される場所を変更することができます。 1つの 'Ajax.BeginForm'だけが必要です。 JavaScriptで変更できる 'form'タグをクライアントに出力します。 – Sam

+1

@kroiz更新を確認してください。 –

1

ビュー

@model TwoModelInSinglePageModel.RegisterModel 
@using (Ajax.BeginForm("DYmanicControllerPage", "Test", FormMethod.Post,null, new { id = "frmSignUp" })) 
{ 
    <div> 
       <input type="hidden" id="" name="hidden2" id="hdasd" /> 
       @Html.HiddenFor(m => m.hidden1) 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name) 
       @Html.ValidationMessageFor(m => m.Name) 
      </div> 
      <br /> 
      <div> 
       @Html.LabelFor(m => m.Address) 
       @Html.TextBoxFor(m => m.Address) 
       @Html.ValidationMessageFor(m => m.Address) 
      </div> 
      <br /> 
      <div> 
       @Html.LabelFor(m => m.PhoneNo) 
       @Html.TextBoxFor(m => m.PhoneNo) 
       @Html.ValidationMessageFor(m => m.PhoneNo) 
      </div> 

<input type="submit" value="Save" id="btnSave" name="ButtonType"/> 
<input type="submit" value="Next" id="btnNext" name="ButtonType" /> 


} 

コントローラ、これを試してみてください、私は私のために仕事の両方を同じ要件/問題があったし、ここでは、両方のソリューションを試してみましたが、彼ら。 jqueryをクリックしてアクションを設定するというアイデアが好きなので、他のビューでも使用できるようにアクションを分けておくことができます。

私はデバッグ中にこれを行うと、TWICEとの両方が投稿されました。 OnSuccessとOnFailureがトリガーされています。それは、しかし、デバッグ時にのみ発生します。ピッキングするときは、このことを念頭に置いてください。

+0

ちょうどメモ:それはデバッグのときだけでなく、通常起こります。私はアクションが実行されるたびにタイムスタンプを記録するtxtファイルを持っていました。デバッグかどうか、私はjquery ....を介してフォームのアクションを設定するときに私は2行が書かれているが、アクションがハードコードされたときに、それは1行しか書いていません。理由がわかるまで、これは安全な方法ではないかもしれません。 – citronsmurf

+0

また、私はAjaxについて多くの芸術家を見つけました.Beginformのダブル投稿。彼らはすべて、邪魔にならないjavascriptのJSファイルを、事故で2回追加した人たち(一度は部分ビューとマスターレイアウトで1回)に関係していました。これは私には当てはまりませんでした。だから私はなぜこれが起こっているのか分かりません。私は本当にjqueryメソッドを動作させたいので、引き続き調べます – citronsmurf

関連する問題