0

我正在创建一个管理页面,如果不允许用户在那里,我需要在几秒钟后重定向页面。管理员登录时应该创建一个会话,我想使用 jquery 检查会话是否存在。

这是c#代码:

protected void Page_Load(object sender, EventArgs e)
{
    if ((string)Session["admin"] == null)
    {
        mainF.InnerHtml = "<div id='inner' style='margin-left:370px; margin-top:80px;font: 0.92em arial,sans-serif;word-spacing: 2px;font-weight: bold;'>Your Are Not Supposed To Be Here.</div>";
    }
}
public bool checkIfAllowed()
{
    bool isIt = false;
    if ((string)Session["admin"] != null && (string)Session["admin"] != "")
    {
        isIt = true;
    }
    return isIt;
}

所以基本上我认为我可以以某种方式使用 jquery 调用 checkIfAllowed() 函数来检查会话是否存在,但我不知道如何。

这就是我所拥有的:

if (!checkIfAllowed() /*which of course doesn't work*/) {
        var inter = setInterval(function () {
            window.location.replace("http://www.google.com");
        }, 3000);
    }
    else {
        clearInterval(inter);
    }

可能还有其他方法可以做到这一点,如果您有一些解决方案,请告诉我。我想我也可以用 asp.net 重定向页面,但它第一次没有工作。我也试着写

$("#inner").html != null && $("#inner").html != ""

在 jquery 的 if() 语句中,因为 #inner html 在 asp.net 中的 pageLoad 上发生了变化。

谢谢=]

4

3 回答 3

0

为了从您的 javascript 调用您的服务器端方法,您必须在您的 aspx 页面中注册一个脚本管理器,并且EnablePageMethods等于 true :

<asp:ScriptManager ID="MyScriptManager" 
    EnablePageMethods="true" 
    EnablePartialRendering="true" runat="server" />

并用属性[WebMethod](命名空间System.Web.Services

[WebMethod]
public static bool checkIfAllowed()
{
    ...
}

在您的 javascript 代码中,您必须调用以关键字为前缀的服务器端方法PageMethod

var isAllowed = PageMethods.checkIfAllowed();

编辑 :

由于调用是异步的,因此函数的结果应该在回调函数中获取:

PageMethods.checkIfAllowed(function(response) {
    if (!response) {
        var inter = setInterval(function () {
            window.location.replace("http://www.google.com");
        }, 3000);
    } else {
        clearInterval(inter);
    }
});

还要注意,由于您的网络方法应该是静态的,因此您必须使用HttpContext.Current.Session而不是Session...

于 2012-12-06T09:38:33.293 回答
0

你需要使用ajax来调用checkIfAllowed() google ajax教程

于 2012-12-06T09:38:37.097 回答
0

你可以做的是:

var session ='<%= Session("VariableName")%>'
if (!session) {
        var inter = setInterval(function () {
            window.location.replace("http://www.google.com");
        }, 3000);
    }
    else {
        clearInterval(inter);
    }

或者您可以使用 HiddenField 并从会话中加载数据,然后检查该值是否存在于 javascript 之类的

var hiddenValue = document.getElementById('myHiddenField');
if (!hiddenValue ) {
            var inter = setInterval(function () {
                window.location.replace("http://www.google.com");
            }, 3000);
        }
        else {
            clearInterval(inter);
        }

希望这会有所帮助。

于 2012-12-06T09:41:17.517 回答