2011-10-06 149 views
9

如何從後面的代碼調用JavaScript函數?
最受歡迎的答案是「ScriptManager.RegisterStartupScript」,但是,這並不適用於我的情況。從vb.net調用javascript代碼

我有一個vb類正在做一個數據庫檢查,看看是否存在一條記錄。如果存在,則調用JavaScript函數來顯示一個警告(「記錄存在」)

所以我做這樣的事情

Dim strMessage as string = "javascript:RecordExists('Param');" 

如何調用從我的vb.net類這個功能呢?

+0

[將參數傳遞給代碼隱藏的JavaScript函數](http://stackoverflow.com/questions/788330/passing-arguments-to-javascript-function-from-code-behind) – abatishchev

+1

究竟是什麼不工作? – abatishchev

回答

13
If DataStore.Record.Exists(theRecord) Then 

    Dim script As String = "alert('Record exists')" 
    If Not Page.ClientScript.IsStartUpScriptRegistered(Me.GetType(), "alertscript") Then 
     Page.ClientScript.RegisterStartUpScript(Me.GetType(), "alertscript", script, True) 

    End If 
End If 

你會不喜歡它上面,你應該replaceDataStore.Record.Exists(theRecord)與條件,檢查數據庫記錄存在

+0

當我嘗試使用您的解決方案時,出現錯誤「Object reference not set to a instance of a object」at「If Not Page.ClientScript .....」 – Troy

+0

'HttpContext.Current.Page.ClientScript' should be work – Deeptechtons

+0

錯誤消息:'Page'不是'System.Web.HttpContext'的成員。 – Troy

11

你需要考慮你的腳本在一個稍微不同的方式 - 記,JavaScript運行在客戶端,而VB.NET運行在服務器端。所以你不能從服務器端「調用」JavaScript。

但是,您可以產生在服務器端的JavaScript,但它需要輸出到頁面才能運行。

如果你正在做一個完整的網頁提交,實現這將是該腳本或函數分配給Literal控制,這使得完全一樣寫在HTML網頁上的Text財產的原始方法。

然後,您的腳本將在渲染Literal時執行。

更好的方法是通過ScriptManager將腳本添加到頁面中。而不是StartupScript,你可以嘗試使用.RegisterClientScriptBlock()來代替?你沒有提到你的情況不起作用嗎?

這樣做的最全面的方法是使用AJAX--無論是.NET的內置框架還是jQuery。 jQuery的AJAX(和AJAX一般)是一個單獨的主題,您可以閱讀關於here的內容。

+0

禁止使用JQuery ... :-( – Troy

+0

沒關係 - 它只是一個很好的東西。再來看看如何使用ScriptManager,如果_really_不適合你,那麼瀏覽.NET AJAX示例。 – Widor