2016-09-22 23 views
0

2つのフォームを同時に異なるアクションに送信できますか?私はTempDataを設定し、第3のアクションにリダイレクトするアクションで。1つのボタンで2つのフォームを送信し、3番目のアクションにリダイレクト

ここで説明した方法を試しましたSubmit two forms with one button各フォームには1つの入力フィールドがあることをお勧めします。第二の「姓」入力で「名前」の入力との最初のフォーム、

submitForms = function(){ 
     document.forms["formForFirstAction"].submit(); 
     document.forms["formForSecondAction"].submit(); 
     window.location("/Home/ThirdAction") 
    } 

私の行動は...

[HttpPost]   
    public void FirstAction(string name) { 
     TempData["name"] = name; 
    } 
    [HttpPost] 
    public void SecondAction(string lastname) { 
     TempData["lastname"]=lastname; 
    } 
    public ActionResult ThirdAction() { 
     string fullname; 
     fullname = string.Format((string)TempData["name"] + 
     (string)TempData["lastname"]); 
     return View(fullname); 
    } 

のように見えます。しかし、それは動作しません。ほとんどの場合、私はフルネーム文字列で名前または姓だけを得ました。それは私があまり知らない非同期または他のものと何かのように見えます。手伝ってくれませんか?

+2

あなたは、複数のフォームを送信することはできません。提出する。あなたはAJAXの投稿をすることができます。 – dave

答えて

2

TempDataは次の即時要求でのみ使用できます。これが、一時データ・ディクショナリから1つのアイテム(これらの2つのアクション・メソッドのうちの1つから設定された最後のアイテム)のみを取得する理由です。あなたは、あなたがAJAX

submitForms = function(){ 
    $.post("@Url.Action("FirstAction")",$("#formForFirstAction").serialize()); 
    $.post("@Url.Action("SecondAction")",$("#formForSecondAction").serialize()); 
    window.location("/Home/ThirdAction") 
} 

を検討oshould

またセッション/データベースのような別の永続化メカニズムを使用して、代わりのフォームを送信考えると、ここでデータ

[HttpPost] 
public void SecondAction(string lastname) { 
    Session["lastname"]=lastname; 
} 
public ActionResult ThirdAction() { 
    string fullname; 
    fullname = string.Format((string)Session["name"] + 
    (string)Session["lastname"]); 
    return View(fullname); 
} 
を永続化するためにセッションを使用した例である必要があります

また、jquery when()またはq.allを使用して、ajaxコールが完了した後にリダイレクトすることを確認することもできます(コールバックhelbleを避けるため l)

+0

返信いただきありがとうございます。しかし、私には1つの質問があります。 SecondActionやFirstActionが複雑なロジックを持ち、CPUがそれを計算してセッションを割り当てるのに時間がかかる場合はどうなりますか? jsスクリプトは完了するまで待つか、リダイレクトを有効にしますか?編集:編集された答えをありがとう。わかった。 – PilgrimViis

+2

いいえ、そうするにはjQuery 'when'を使うべきです。ポストメソッドのコールバックでリダイレクトを実行する(2つのajaxコールがあるので良いアプローチではありません!コールバックhellの問題)。更新された答えを見る – Shyju

1

解決策1:AJAXフォームの提出を使用してください。

解決策2:すべてを1つのフォームで非表示と送信で作成します。この静的を実装できます。すべての送信ボタンをクリックすると、 form1とform2のデータを読み込んで、フォームを非表示にしてフォームを更新して送信する必要があります。

解決策3:動的非表示フォームの作成と送信。すべてをダイナミックに作成したフォームに統合し、オンザフライで送信します。作成例

How to create a form dynamically using JavaScript?

Plain JS approach 
my_form=document.createElement('FORM'); 
my_form.name='myForm'; 
my_form.method='POST'; 
my_form.action='http://www.another_page.com/index.htm'; 

my_tb=document.createElement('INPUT'); 
my_tb.type='TEXT'; 
my_tb.name='myInput'; 
my_tb.value='Values of my Input'; 
my_form.appendChild(my_tb); 

my_tb=document.createElement('INPUT'); 
my_tb.type='HIDDEN'; 
my_tb.name='hidden1'; 
my_tb.value='Values of my hidden1'; 
my_form.appendChild(my_tb); 
document.body.appendChild(my_form); 
my_form.submit(); 

jQueryのアプローチのための

ダイナミック

Dynamically create and submit form

$(document).ready(function(){ 
    $('<form action="form2.html"></form>').appendTo('body').submit(); 
}); 
あなたが最初の1の後に制御を失うことになるので、
関連する問題