簡體   English   中英

在.NET MVC中,是否有一種簡單的方法來檢查我是否在主頁上?

[英]In .NET MVC, is there an easy way to check if I'm on the home page?

如果用戶從主頁登錄,我需要采取特定操作。 在我的LogOnModel中,我有一個隱藏字段:

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

在我的Controller中,我需要檢查該值是否為主頁。 在下面的示例中,我正在檢查用戶是否在特定頁面上(“Account / ResetPassword”)。 有沒有辦法檢查它們是否在主頁上而不訴諸正則表達式?

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

有任何想法嗎? 一百萬謝謝!

解決這個問題的一種方法是在RouteData查找特定的控制器。 假設您用於主頁的控制器稱為“HomeController”,則請求的RouteData將包含鍵“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()的需要。

更新

您還可以通過將引用URL( Request.UrlReferrer.AbsoluteUri )映射到路由來消除對隱藏字段的需求(從而減少應用程序中每個頁面的整體頁面權重)。 這里有一篇關於此的帖子。

如何通過URL獲取RouteData?

我們的想法是使用mvc引擎將引用者URL映射到LogOnInt方法中的MVC路由,從而允許代碼完全自包含。

這可能比把控制器名稱和操作名稱放在那里更干凈,讓全世界都可以看到腳本將其推回服務器。

在任何視圖中,以下代碼返回當前控制器名稱。

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

這很容易嗎? :)

您可以通過獲取當前網址

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,這意味着如果您的路由發生變化,您將不必更改此代碼。

你可以使用

  Request.Url.AbsoluteUri

然后只需檢查字符串中的頁面名稱。

可能不是最好的方式,但它是一種快速簡便的方法。

我從這個頁面得到了這個方法:

如何在MVC 3中獲取當前頁面URL

還有另一個答案可能對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM