Csharp/C#教程:在.NET MVC中,是否有一种简单的方法来检查我是否在主页上?分享


在.NET MVC中,是否有一种简单的方法来检查我是否在主页上?

如果用户从主页登录,我需要采取特定操作。 在我的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 )映射到路由来消除对隐藏字段的需求(从而减少应用程序中每个页面的整体页面权重)。 这里有一篇关于此的post。

如何通过URL获取RouteData?

我们的想法是使用mvc引擎将引用者URL映射到LogOnInt方法中的MVC路由,从而允许代码完全自包含。

这可能比将控制器名称和操作名称放在那里更干净,让全世界都可以看到脚本将其推回服务器。

在任何视图中,以下代码返回当前控制器名称。

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

这很容易吗? ?

您可以通过获取当前url

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

您可以在HtmlHelper或呈现登录视图的控制器中执行此操作。

url存储在隐藏字段中,然后在post post中存储:

 [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

还有另一个答案可能对您有用。

上述就是C#学习教程:在.NET MVC中,是否有一种简单的方法来检查我是否在主页上?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954469.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐