2012-03-16 41 views
1

我有一個c#asp.net頁面和一個更新函數,它將更新數據庫。在這個函數中,我想調用一些客戶端的JavaScript。我已經閱讀了很多關於在page_load()中註冊啓動腳本的內容,但這總是在頁面加載時觸發(有趣!)從asp.net調用clientside javascript c#頁面

如何註冊然後在我的更新函數中調用腳本?當用戶點擊「更新」按鈕時觸發。我試過以下(在我的功能)

protected void doUpdate(object sender, EventArgs e) { 

    string jScript; 
    jScript = "<script type=text/javascript>alert('hello');<" + "/script>"; 

    ClientScript.RegisterStartupScript(GetType(), "Javascript", jScript); 
} 

但它沒有被解僱。有任何想法嗎?非常感謝。

[更新]

它現在的工作 - 功能看起來像這樣

protected void doUpdate(object sender, EventArgs e) { 
    ScriptManager.RegisterStartupScript(this, GetType(),"Javascript", "cleanup();",true); 
} 

清理()是我的HTML JavaScript函數。感謝您的幫助:)

+0

引起的UpdatePanel內回發的控制? – 2012-03-16 12:27:46

+0

是的。這是可能的問題嗎? – 2012-03-16 12:35:30

+0

添加了答案。是的,這可能是問題:) – 2012-03-16 12:45:18

回答

3

如果導致回發的控制是一個UpdatePanel內需要使用

ScriptManager.RegisterStartupScript

+0

那麼會在頁面加載? – 2012-03-16 12:53:18

+0

你可以在doUpdate上使用它,這很好 – 2012-03-16 13:07:07

+0

感謝Claudio - 完美的作品! – 2012-03-16 13:29:57

1

您不能從網絡服務器'執行'客戶端腳本(客戶端知道服務器是誰,但不是其他方式)。

克服這個限制的唯一方法是通過a。創建一個從服務器請求某個東西的長輪詢過程,服務器不會完成請求,直到它返回一些東西(然後客戶端發出另一個請求)。

你真正想要的是websocket(雙工)啓用通信。你可以查看鍊金術websockets或SignalR(有一個很好的動態代理生成庫)。

'腳本始終在Page_Load上工作'的原因是因爲它有效地將腳本標籤注入爲請求的頁面返回的html。

1

「更新」按鈕很可能使用標準的ASP按鈕行爲,這意味着它在呈現時爲type="submit"。既然如此,您可以使用:

Page.ClientScript.RegisterOnSubmitStatement 

請記住,將爲每個回發註冊腳本,而不僅僅是更新按鈕。所以,如果你只想點擊更新一些javascript,你需要檢查EventTarget是否爲UpdateButton.ClientID。另外,RegisterOnSubmitStatement總是添加<script>標籤,因此不要在JavaScript語句中包含這些標籤。

更簡單的解決方案,ASP Button本身也有一個OnClientClick屬性。這將在瀏覽器中點擊按鈕時運行客戶端代碼(javascript)。

+0

謝謝 - 這似乎是正確的選擇。不過,我認爲它被稱爲onSubmit。我正在尋找一種方法,在我的代碼完成一些檢查後,以編程方式調用該函數。例如,更新是好的 - 然後調用JS ..否則不要。謝謝:) – 2012-03-16 12:42:30

+1

啊,如果你確實需要在回發後運行腳本,那麼我認爲克勞迪奧的解決方案是你需要去的方式。 – 2012-03-16 12:45:02