2016-07-13 7 views
0

AngularJsフレームワークでASP.NET MVCを使用しています。私のホームコントローラでは、私は、有効なライセンスがあるかどうかをチェックしていない場合、私はこのコードでライセンスをインポートするページに再指向しています:で、別のURLへのリダイレクトを検出する

public ActionResult Index() 
 
     { 
 
      var retVal = _licenseProvider.ValidateExistingLicense(); 
 

 
      if (!retVal.Item1) 
 
      {     
 
       Response.Redirect("DataMaintenance/ImportLicenses", true); 
 
       return View("DataMaintenance/ImportLicenses"); 
 
      }

ので、私のImportLicensesコントローラー私はリダイレクトされたのかメニューから呼び出されたのかを検出したい。別のアクションにリダイレクトする古いスレッドが見つかりましたが、その解決策は適用されません。私の選択肢は何ですか?

+1

なぜResponse.RedirectToActionの代わりにResponse.Redirectを使用しているのですか? –

+0

別のエリアにある別のコントローラだから – Naomi

+1

RedirectToActionを使用すると、別のエリアにリダイレクトすることもできます: 'return"、RedirectToAction( "Index"、 "ImportLicenses"、new {area = "DataMaintenance"} ' –

答えて

0

私はちょっとした不正行為をすることにしましたが、うまくいきました。メニューでは、私が代わりに私は別の行動を導入し、通常のindexアクションで、換言すれば、この

dataMaintNodes.SubNodes.Add(new MenuMapNode() { LabelKey = "importLicense", Action = "ImportLicenses", Controller = "ImportLicenses", Area = "DataMaintenance", Icon = "", Roles = "IMPORTLIC" });

に元の通話を変更しました。その新しいアクションをコントローラに追加し、メニューから呼び出されたときにViewBagプロパティをfalseに設定し、Redirectによって呼び出されるIndexアクションでtrueに設定しました。だから、それは不正行為だが、うまくいく。私は、通常のメニューから呼び出すときにそのモーダルダイアログにキャンセルボタンを表示し、ホームコントローラから呼び出されたときにはキャンセルボタンを表示しないようにしたかった。今、私の2番目の問題は、Modal Dialogが本当にそれから脱出してアプリケーションの作業を続けることを妨げないということです。だから、我々はより多くの論理を導入したいかもしれない。

1

あなたがここにオプションのカップルを持っている:

  1. は は、ユーザーがTempDataを設定

  2. リダイレクトするか、メニューを経由してここに来たかどうかを決定することをImportLicensesアクションでクエリ文字列パラメータを追加します。変数をインポートしてから ImportLicensesアクションにリダイレクトします。

  3. は、それが本当にあなたの制約に依存Session変数

Read this for more information about passing data between Action methods.

1

を使用して、多くのオプションがあります。あなたのプロジェクトについて多くのことを知らずに。私の最初の提案は、リダイレクトする前にクッキーを削除することです。次に、リクエストがImportLicensesアクションに入ったときにチェックをチェックして削除できますが、ビューモデルでそのクッキーが見つかったかどうかを反映させることができますUIのこれ。

セッション状態やクエリ文字列パラメータの使用のような他のオプションがあります。クエリ文字列のパラメータは、上記のクッキーのアイデアと同じくらい効果的かもしれませんし、少し洗練されたものになります。

あなたのユースケースに関する詳細情報を提供できる場合は、私の回答を拡大することができます。

これが役に立ちます。

0

このスレッドのコメントと以前に見たスレッドに基づいて、別のソリューションを試しました。レスポンスを使用しました。RedirectToActionメソッド(コメントが示唆したように)、私はこのコードを追加:しかし、これは例えば、動作しませんでした

 protected override void OnActionExecuted(ActionExecutedContext filterContext) 
 
     { 
 
      ViewBag.needValidLicense = false; 
 
      if (filterContext.Result is RedirectResult) 
 
      { 
 
       ViewBag.needValidLicense = true; 
 
      } 
 

 
      base.OnActionExecuted(filterContext); 
 
     }

をその結果はRedirectResultとして表示されませんでした。私は、メニューから呼び出されたときに別のアクションを使用するという元の解決策に戻すつもりです。

関連する問題