2017-02-24 4 views
1

私はRazorでフォームを作成しました。ユーザーは、彼らがそのフォームに記入したデータをユーザーがフォームの現在の状態を保存し、後でそれに戻って来ることができますフォームデータを.NETの複数のアクションに渡す

SaveCurrentProgress(User user) 

を...取るために2つのアクションを選択することができます。または:

SubmitFinalVersion(User user) 

フォームデータを保存してから読み取り専用にします。

私はHtml.BeginForm()を使用してオブジェクトを単一のアクション/コントローラに渡す方法を知っていますが、ユーザーが2つのアクションのいずれかにオブジェクトを渡せるようにするにはどうすればいいですか?

+1

この質問にはあなたが探している答えがあると思います:[ASP.NET MVCフレームワークで複数の送信ボタンをどうやって処理しますか?](http://stackoverflow.com/questions/442704/how-do-you-ハンドルを複数の送信ボタンのasp-net-mvcフレームワーク) –

+1

ちょうどデータを何かを追加するプロセスを決定するために渡される...それは常にaction1がヒットしますが、おそらくアクション1のaction2に渡されますデータの値によって異なります。 – Seabizkit

答えて

1

は本当にになりません。あなたは潜在的に、どのボタンがクリックされたかに基づいてアクションを切り替えるいくつかのJSソリューションを製造することができますが、基本的なフォームがあれば、条件付きでアクションを変更する方法はありません。

ただし、に送信ボタンの名前を付け、1回のアクション内で分岐します。

if (Request["SaveProgress"] != null) 
{ 
    // save progress 
} 
if (Request["SaveFinal"] != null) 
{ 
    // save final 
} 

クリックするだけでボタンがポストのデータにそれを行いますので、あなたはボタンの名前の存在を使用することができます。例えば:あなたのアクションで次に

<button type="submit" name="SaveProgress">Save Current Progress</button> 
<button type="submit" name="SaveFinal">Save Final Version</button> 

、ユーザーがクリックしたかどうかを判断します。

最後に、不完全なデータを保存することを心配しないでください。サーバー側localStorageを利用して、入力したデータをユーザーがフォームに追加するときに保存することができます。これは、その目的のために明示的なボタンが必要ないことを意味します。しかし、この方法の欠点の1つは、クライアント側であるため、ユーザーが現在編集しているブラウザとマシンに必ずバインドされることです。彼らが別のコンピュータに移動した場合、編集を再開することはできません。

関連する問題