2012-12-06 126 views
0

我是一個管理頁面,我需要在幾秒鐘後重定向頁面,如果用戶不允許在那裏。應該有一個會話在管理員進入時創建,我想用jquery來檢查會話是否存在。使用jquery或ajax調用asp.net函數

這裏是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; 
} 

所以basicly我想,我可以以某種方式使用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重定向頁面,但第一次不工作。 我也嘗試在jQuery的的if()語句寫

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

,因爲#inner HTML是在頁面加載在asp.net改變。

感謝=]

+0

您不能直接從JQuery調用C#頁面函數。您將需要在可從HTTP訪問的系統上公開您的方法,即Web服務等。然後,您可以使用$ .ajax方法從Jquery調用HTTP方法。 – Liam

+0

如果未通過身份驗證,則不應允許非管理員用戶進入管理頁面。在他進入頁面之前檢查用戶權限。 –

回答

0

爲了從你的JavaScript調用服務器端方法,你在你的aspx頁面枝條註冊一個腳本管理EnablePageMethods等於真:

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

,並

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

和最後一件事喲:與屬性[WebMethod](命名空間System.Web.Services裝飾你的服務器端方法烏爾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); 
    } 
}); 

還要注意的是,由於你的WebMethod應該是靜態的,你必須使用HttpContext.Current.Session,而不是Session ...

+0

在我的aspx頁面中,我把scriptManager? (在contectPlaceHolder ..?) –

+0

無論是在您的母版頁還是在contentPlaceHolder中。你可以看看例如:http://geekswithblogs.net/frankw/archive/2008/03/13/asp.net-ajax-callbacks-to-web-methods-in-aspx-pages.aspx。 –

+0

謝謝! 正常工作=] –

0

你需要使用AJAX調用checkIfAllowed()Google中的Ajax教程

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); 
     } 

希望這會有所幫助。

+0

var session ='<%= Session(「VariableName」)%>' 給了我一個錯誤,表示會話在當前內容中不存在 –

+0

您可以使用隱藏字段來提到另一種方式。 –