【问题标题】:How do I get the current page name if it's not displayed in the URL when that page is the default page for a web app?当该页面是 Web 应用程序的默认页面时,如果 URL 中未显示当前页面名称,如何获取该名称?
【发布时间】:2023-03-25 04:14:01
【问题描述】:

我有一个 ASP.NET 网站。 Masterpage 上有一个 ASP.NET 菜单。如果当前页面是登录页面,我想隐藏菜单。我的登录页面是 Login.aspx。这是我如何使菜单不可见/可见的代码:

var pathname = window.location.pathname;
if (pathname.toLowerCase().indexOf("login.aspx") > 0)
    $('#mainmenu').hide();
else
    $('#mainmenu').show();

但是我在IIS上部署的时候,第一次打开网站时url不包含页面名称,所以菜单是可见的。这种情况下如何判断当前页面?

【问题讨论】:

  • 检查仅出现在登录页面上的元素。
  • 您在客户端执行此操作。最好在服务器端进行。不使用javascript
  • @CEbrus,我也想到了这个技巧。但我觉得它有点不聪明
  • @ArashMilani,我之前试过在服务器端做,这也是我一开始想要的。但是菜单放在 MasterPage 中。我该如何控制它?等一下,也许是一个 Session 变量?像旗帜一样的东西?我会检查的。
  • 如果登录屏幕上的 url 没有改变,你唯一的选择是检查页面的内容,或者设置一个 cookie。

标签: javascript asp.net url


【解决方案1】:

如果你想在 javascript 中这样做,你可以这样做

var pathArray = window.location.pathname.split( '/' );

// assuming the url as http://www.example.com
var url_length = pathArray.length;
//if url is http://www.example.com, then url_length will have 3
//if url is http://www.example.com/login.aspx, then url_length will have 4

所以,

if( url_length==3 || pathArray[pathArray.length-1]=="login.aspx")
{
    $('#mainmenu').hide();
}
 else
 {
     $('#mainmenu').show();
 }

希望这会对你有所帮助。

【讨论】:

  • OP提到显示登录页面时路径不会改变。
【解决方案2】:

您应该在服务器端 IMO 中执行此操作。无论如何,假设您的 Web 应用程序地址是 http://yourdomain.com/app/ 并且您的登录页面是默认页面。那么即使他没有输入http://yourdomain.com/app/login.aspx,它也会显示给用户,所以我们需要检查的是我们的地址是否以yourdomain.com/app/结尾。如果是这样,我们将隐藏菜单。

var pathname = window.location.pathname;
var appDomainEndding = 'yourdomain.com/app/'
if (pathname.toLowerCase().indexOf("login.aspx") > -1 || 
    pathname.indexOf(appDomainEndding, pathname.length - appDomainEndding.length) > -1)
$('#mainmenu').hide();
else
$('#mainmenu').show();

【讨论】:

  • OP提到显示登录页面时路径不会改变。
  • @Cerbrus 他说“第一次打开网站时url不包含页面名称”我认为他的意思是当web应用程序的默认页面打开时没有login.aspx在 url 上,而默认页面是登录页面。
  • 没错。那么这段代码如何检查页面是否“登录”?如果我理解正确,您假设如果用户已登录,则 url 已更改?
  • 谢谢。这既回答了我的问题,又提供了更好的建议。我不知道为什么我没有想到有一个会话变量来决定菜单的可见性。我完全同意菜单不应该出现在网络浏览器中,即使它不可见。如果我将它隐藏在服务器端,那么未经身份验证的用户无论如何都不会知道应用程序有哪些菜单。
  • @Cerbrus 我知道你的意思。但似乎 Mike 刚刚获得了一个公共页面 (login.aspx),这也是 webapp 默认页面。他的应用程序中的其他页面仅对登录用户可见。是的 url 在导航到其他页面时确实会发生变化。所以我们需要做的就是检查两个相同的地址。这就是为什么这会起作用。
【解决方案3】:

如果登录屏幕上的 url 没有改变,你唯一的选择是检查页面的内容,或者设置一个 cookie: 让服务器设置类似"pageIsLogin=true" cookie 并检查document.cookie 是否有。

if(~document.cookie.indexOf("pageIsLogin=true")){
    //Login-specific settings here.
}else...

(不要忘记在其他页面上取消设置该 cookie)

或者,像我的第一个建议一样,检查页面是否包含特定于登录的元素:

if(document.getElementById("loginSpecificField")){
    //Login-specific settings here.
}else...

【讨论】:

    【解决方案4】:

    在每个“页面”上提供一个特殊变量。这是这个场景的经典选择。它通常用于允许脚本化的、包含的菜单系统区分任何和所有页面,并在此基础上提供功能,例如突出显示、删除链接等。它的工作方式是在每个页面上设置一个特定的变量,然后由菜单系统对其进行测试并采取相应措施。

    可以出于多种原因重复使用相同的变量,例如测试特定功能是否可用,是否包含页面元素等。

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2011-06-17
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2012-01-06
      • 2014-03-14
      相关资源
      最近更新 更多