在.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