2011-04-10 42 views
1
<script type="text/javascript"> 

    function reload() { window.parent.location.href = "loginPage.aspx"; } 

</script> 

我有上面的JavaScript,如何在後面調用此代碼?C#和Javascript

private void checkpageacess() 
{ 
    if ((lpsContext)Session["sessionfContext"] == null) 
    { 
     //-------------------I want to call that java script here 
     Response.Redirect(@"~\Logout.aspx"); 
    } 
    else 
    { 
     ErrorManager.Current.LpsContext = (lpsContext)Session["sessionfContext"]; 
    } 
} 
+1

該語言被稱爲「javascript」,而不是「java script」或「java」。 (我糾正了你的問題,標題和標籤。) – 2011-04-10 11:40:16

+0

當你說你的「代碼在後面」時,你的意思是像servlet代碼嗎? C#代碼? – roberttdev 2011-04-10 11:44:36

回答

0

你可以使用RegisterStartupScript方法:

public void Button1_Click(Object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(
     GetType(), 
     "myscript", 
     "reload();", 
     true 
    ); 
} 

這將調用JavaScript函數,一旦頁面在客戶端上呈現的reload

+0

但我使用它的功能不在按鈕單擊事件。請幫我 – 2011-04-10 11:39:47

+0

@Daniel Raj在什麼功能?請顯示你的代碼。如果它在代碼背後,這個函數是如何觸發的? – 2011-04-10 11:40:15

+0

如果你添加一個IsClientScriptBlockRegistered()檢查,我會投這個票。 :) – Kon 2011-04-10 11:52:54

2

您不能直接從C#代碼調用JavaScript代碼。後者在服務器上運行以響應請求,而服務器在服務器完成處理並提供響應後在客戶端上運行。

你可以做什麼,正如@Darin Dimitrov在他的例子中所展示的那樣,決定了何時在C#代碼中將JavaScript函數傳遞給客戶端並設置它何時執行。這通常發生在頁面呈現時(可能會有短暫的延遲),以響應某種頁面事件(如單擊按鈕)。

當然,這意味着它必須通過回發來響應頁面事件,這可能不是您正在尋找的用戶體驗。你能詳細說明何時需要調用這個方法嗎?請記住,與頁面交互以及與服務器交互是兩件完全不同的事情。所有的C#代碼都是在JavaScript代碼可用之前執行的。它的高度很可能你想要做的是響應頁面事件,並且應該完全用JavaScript在客戶端完成,而不是從C#完成。

+0

private void checkpageacess() if((lpsContext)Session [「sessionfContext」== == null) { I -------------想要調用該java腳本這裏------------------ Response.Redirect(@「〜\ Logout。ASPX 「);} 其他 { ErrorManager.Current.LpsContext =(lpsContext)會議[」 sessionfContext「];} } – 2011-04-10 11:53:07

+0

@Daniel拉吉:你爲什麼要調用JavaScript有什麼呢?當你在__ _ _ _ _ _ _ _ _ _ __上執行'Response.Redirect'時,您向客戶端指出它應該發起一個全新的請求,爲什麼要告訴客戶端去一個頁面然後立即告訴他們去另一個? – David 2011-04-10 11:57:34

+0

我想他想在用戶重定向之後調用JavaScript函數嗎?在這種情況下,請在重定向之前設置一個會話變量,然後在Logout的頁面加載事件中檢查會話變量並按照Darin的回答註冊開始up腳本。 – Kon 2011-04-10 12:09:13

0

你不能用你當前的邏輯來做,因爲當你調用Response.Redirect命令時,你發送給瀏覽器的任何JavaScript代碼將不會消失。

一種解決方法是讓客戶端reload函數執行兩種操作:在父窗口中加載不同的頁面,並重定向當前窗口。

reload代碼將是這樣的:

function reload() { 
    window.parent.location.href = "loginPage.aspx"; 
    document.location.href = "/Logout.aspx"; 
} 

背後代碼:

if ((lpsContext)Session["sessionfContext"] == null) 
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "auto_reload", "reload();", true); 
} 

(是的,有什麼達林給準確地說,只是在正確的背景下:))

您也可以考慮使checkpageacess返回布爾值,如果爲false,則放棄任何進一步的操作。

+0

謝謝你darin ..其工作 – 2011-04-12 14:53:32