2009-05-07 6 views
1

他のビューから呼び出して再利用したい部分ビューをいくつも作成して削除しています。問題は、成功すると元のビューに戻って適切なリダイレクトを生成できるように、私はreturnルートとrouteValuesをcreateおよびdeleteコントローラメソッドに渡す必要があるということです。私はこれをきちんと保つためにいくつかの拡張機能とヘルパーを作成しましたが、この方法で問題に近づくように巻き込まれているようです。私は何かを逃したか? (リダイレクト)コントローラ、アクション、およびrouteValuesが異なる場合、RedirectToActionへの簡単な方法はありますか?ASP.Net MVCの動的リダイレクトルートの処理に必要な提案

例明確にするため:製品AZインデックス表示、製品SomeCategoryインデックスビューの両方を持っている(「あなたが本当にしたい削除しますか」というメッセージが表示されます)[削除]ビューを呼び出し、削除ボタンを持っている「本当に削除します。 "ボタンは、製品コントローラの実際の(POST)Deleteメソッドにポストバックします。製品が削除されたら、RedirectToActionを返す必要がありますが、 'AZインデックス'と 'SomeCategoryインデックス'ビューには削除リンクがありますので、最初に削除と呼ばれるビューにアクション、コントローラ、ルート値を動的に設定する必要があります。

これは難しいことではありませんが、削除を処理するすべてのコントローラーとビューのリダイレクト値を渡すのは非常に複雑です。これを行うには賢明な方法が必要であるという理由があります。

+0

あなたは現在どのようにしていますか? RedirectToRouteの値をPOSTフォームに保持するか、一時的にサーバーのどこかに保持しますか? –

答えて

0

あなたはRedirectToRoute

RedirectToRoute(new {controller = "MyController", Action = "Create", id = ""}); 
+0

メソッド呼び出しの間で呼び出し元ビューのcontroller、action、およびrouteValuesを維持するという問題は解決しません。 – grenade

0

を使用することを検討したのは、「削除の確認」のため、全体のビューを使用していないことを検討してください。 HTMLヘルパーとjavascript 'confirm()'を使用してください。すなわち、ポストフォームをレンダリングし、ヘルパーとのリンクを削除すると、ユーザが「削除」をクリックすると、「削除してください」というメッセージが表示されます。 OKの場合、関数は "true true"を返し、削除するフォーム上でsubmitを呼び出します。削除アクションは通常どおりにリダイレクトされます。私はあなたが削除しようとしている別のオブジェクトの異なる削除アクションを使用していると思います。あなたの計画が一般的な削除アクションを持っているならば、それは難しくなります(IMOは推奨されません)。

マイ削除ヘルパーは、物事の多くを含むが、削除部分は(切れ端で)次のようになります。

  string deleteLink = String.Format(@"<a onclick=""deleteRecord({0})"" href='#'>Delete</a><form id='deleteForm' method='post' action='" + 
      routeRelativePath + "/" + actionPrefix + "Delete/" + model.ID + 
      @"'></form>", model.ID); 

は(ヘルパー)、それを..andあまりにもいくつかのJSを添付:

function deleteRecord(recordId) { 
    if(confirm('Are you sure you want to delete this {friendlyModelName}?\nNOTE: There is no Undo.')) { 
     // Perform delete 
     var action = "{routeRelativePath}/{actionPrefix}Delete/" + recordId; 

     // jQuery non-AJAX POST version 
     $("form#deleteForm").submit(); 
    } 
} 

..あなたは、ヘルパーがルートとIDなどのすべてのパラメータを持つDeleteリンクを作成することがわかります。jsは単純に「確認」部分を実行し、ヘルパーによって作成された小さなものを送信します。

[サンプルが100%完了していない場合は申し訳ありません - 私は物事の多くを取り除くために持っていた:例えばヘルパーおよび添付JSは、多くの異なるモードを持っているAJAXのPOSTをサポートするようになど]

+0

あなたのソリューションは多くの状況で有効ですが、このシナリオでは、削除するアイテムの下に複雑な依存関係ツリーがあり、確認ビューに表示されるので、削除するとビューが必要です。コールビューに戻るためのメカニズムを必要とする任意の数の他のビューから呼び出すことができる、作成ビューと編集ビューでの動的リダイレクションサポートも必要です。 – grenade

1

リクエストに照会しますDeleteアクション(確認ビューを表示するアクション)に.UrlReferrerを追加し、参照データの詳細を一時データに格納します。

削除アクションでは、一時データから参照元の詳細を読み取って、リダイレクト(文字列)オーバーロードを使用して、ユーザーを元の削除要求に参照したURLにリダイレクトします。

関連する問題