11

ユーザーがホームページからログインした場合、特定のアクションを実行する必要があります。私の LogOnModel には、隠しフィールドがあります。

@Html.Hidden("returnUrl", Request.Url.AbsoluteUri)

私のコントローラーでは、その値がホームページかどうかを確認する必要があります。以下の例では、ユーザーが特定のページ (「Account/ResetPassword」) にいるかどうかを確認しています。正規表現に頼らずにホームページにあるかどうかを確認する方法はありますか?

    [HttpPost]
    public ActionResult LogOnInt(LogOnModel model)
    {
       if (model.returnUrl.Contains("/Account/ResetPassword"))
       {
          return Json(new { redirectToUrl = @Url.Action("Index","Home")});
       }

何か案は?百万の感謝!

4

4 に答える 4

8

これにアプローチする1つの方法は、で特定のコントローラーを探すことRouteDataです。ホームページに使用しているコントローラーの名前が「HomeController」であるとするRouteDataと、リクエストのforには、キー「Controller」の値「Home」が含まれます。

次のようになります。

代わりに(または他の理由がある場合に加えて):

 @Html.Hidden("returnUrl", Request.Url.AbsoluteUri)

あなたが持っているだろう:

 @Html.Hidden("referrer", Request.RequestContext.RouteData.Values['Controller'])

コントローラは次のようになります。

[HttpPost]
public ActionResult LogOnInt(LogOnModel model)
{
   if (model.referrer = "Home")
   {
      return Json(new { redirectToUrl = @Url.Action("Index","Home")});
   }
 }

これにより、使用する必要がなくなります.Contains()

更新

Request.UrlReferrer.AbsoluteUriリファラーのURL( )をルートにマッピングすることで、非表示フィールドの必要性を排除することもできます(これにより、アプリケーション内のすべてのページのように見える全体的なページの重みを減らすことができます) 。ここにそれについての投稿があります。

URLでRouteDataを取得する方法は?

アイデアは、mvcエンジンを使用して、リファラーURLをLogOnIntメソッド内のMVCルートにマップし、コードを完全に自己完結させることです。

これは、コントローラー名とアクション名を公開して、サーバーにプッシュバックするためのスクリプトと一緒に世界中に公開するよりも、おそらくクリーンです。

于 2012-06-27T21:00:52.887 に答える
5

どのビューでも、次のコードは現在のコントローラー名を返します。

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString()

簡単ですか?:)

于 2012-06-27T21:17:20.710 に答える
5

を介して現在の URL を取得できます。

string controller = (string)ViewContext.RouteData.Values["controller"];
string action = (string)ViewContext.RouteData.Values["action"];
string url = Url.Action(action, controller);

これは、HtmlHelper またはログイン ビューをレンダリングするコントローラーで行うことができます。

あなたurlがしたように非表示のフィールドに保存してから、投稿アクションで:

[HttpPost]
public ActionResult LogOnInt(LogOnModel model)
{
   // Create your home URL
   string homeUrl = Url.Action("Index", "Home");
   if (model.referrer == homeUrl)
   {
      return Json(new { redirectToUrl = @Url.Action("Index","Home")});
   }
 }

を使用する利点はUrl.Action、ルート テーブルを使用して URL を生成することです。つまり、ルートが変更された場合でも、このコードを変更する必要はありません。

于 2012-06-27T21:12:50.633 に答える
0

あなたは使用することができます

  Request.Url.AbsoluteUri

次に、ページ名の文字列を確認します。

最善の方法ではないかもしれませんが、迅速かつ簡単な方法です。

私はこのページからその方法を得ました:

MVC 3 で現在のページ URL を取得する方法

あなたに役立つかもしれない別の答えもあります。

于 2012-06-27T18:37:01.667 に答える