1

我有一个 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不包含页面名称,因此菜单变得可见。这种情况下如何确定当前页面?

4

4 回答 4

2

如果您想在 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();
 }

希望这会帮助你。

于 2012-12-13T08:50:31.167 回答
1

您应该在服务器端 IMO 中执行此操作。无论如何,假设您的网络应用程序地址是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();
于 2012-12-13T08:52:07.580 回答
1

如果在登录屏幕上 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...
于 2012-12-13T08:53:36.900 回答
1

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

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

于 2012-12-13T09:32:06.357 回答