2012-12-06 6 views
0

나는 관리자 페이지를 만들고 있는데, 사용자가 거기에있을 수 없다면 몇 초 후에 페이지를 리다이렉션해야한다. 관리자가 로그인 할 때 생성 된 세션이 있어야하며 jquery를 사용하여 세션이 있는지 확인하려고합니다. 여기 jquery 또는 ajax와 함께 asp.net 함수 호출하기

는 C# 코드입니다 : 그래서 basicly

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

내가 어떻게 든 세션이 존재하는지 여부를 확인하기 위해 checkIfAllowed() 함수를 호출하는 jQuery를 사용할 수있는 생각,하지만 난 잘 모릅니다.

이 내가 무엇을 가지고 : 당신이 말해주십시오 일부 솔루션이있는 경우

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이 asp.net에 pageLoad에 변화 때문에 가 나는 또한, JQuery와에있는 경우() 문에

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

를 작성했습니다.

감사 =]

+0

JQuery에서 C# 페이지 함수를 직접 호출 할 수 없습니다.HTTP, 즉 웹 서비스 등에서 액세스 할 수있는 시스템에 메소드를 공개해야합니다. 그런 다음 $ .ajax 메소드를 사용하여 Jquery에서 HTTP 메소드를 호출 할 수 있습니다. – Liam

+0

인증되지 않은 경우 관리자가 아닌 사용자는 관리자 페이지로 들어가서는 안됩니다. 그가 페이지에 들어가기 전에 사용자 권한을 확인하십시오. –

답변

0

자바 스크립트에서 서버 측 메소드를 호출하기 위해서, 당신은 당신의 aspx 페이지의 가지에 스크립트 관리자를 등록해야 EnablePageMethods true로 동일 :

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

과에를 요에

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

과 마지막 : 속성 [WebMethod] (네임 스페이스 System.Web.Services와 서버 측 방법을 장식 UR 자바 스크립트 코드는 키워드 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); 
    } 
}); 

또한 웹 메소드가 정적이어야하므로대신 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

당신은 당신이 할 수있는 것은

0

아약스 자습서 구글) checkIfAllowed을 (전화 아약스를 사용해야합니다 :

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

을 또는 당신은에 HiddenField를 사용하여로드 할 수 있습니다 귀하의 세션에서 데이터를 누른 다음 값이 존재하는지 여부를 확인하십시오.

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

숨겨진 필드를 사용하여 언급 한 다른 방법으로 할 수 있습니다. –

관련 문제