2012-06-30 138 views
0

我正在從asp.net(vb)中的代碼隱藏中生成一個JavaScript警告框。Javascript alert not working from code behind

的代碼:

  Catch ex As Exception 
       MesgBox("Error in uploading file due to following exception" & vbNewLine & ex.ToString) 
       trans.Rollback() 
      Finally 
       conn.Close() 
      End Try 

的mesgbox功能如下:

Private Sub MesgBox(ByVal sMessage As String) 
    Dim msgedtble As String = sMessage.Replace("\", "\\") 
    msgedtble = msgedtble.Replace(vbNewLine, "\n") 
    Page.ClientScript.RegisterStartupScript(Me.GetType, 
"myScripts", 
"<script language='javascript'>alert('" & msgedtble & "');</script>") 

End Sub 

現在,當異常被拋出,下面的腳本是在客戶端側的HTML形式的標籤所附:

 <script language='javascript'>alert('Error in uploading file due to following exception\nSystem.Data.SqlClient.SqlException (0x80131904): Violation of UNIQUE KEY constraint 'IX_AccountMaster'. Cannot insert duplicate key in object 'dbo.AccountMaster'.\nThe statement has been terminated.\n at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)\n at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)\n at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)\n at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)\n at System.Data.Common.DbDataAdapter.Update(DataTable dataTable)\n at UploadAccountMasterXl.Button1_Click(Object sender, EventArgs e) in C:\\Users\\ssaa\\Documents\\Visual Studio 2010\\WebSites\\Dpp2012\\UploadAccountMasterXl.aspx.vb:line 57');</script> 

爲什麼這不會出現在我的瀏覽器(Firefox)中?

回答

2

添加Imports System.Web.Script.Serialization到你的文件的頂部,那麼試試這個:

Private Sub MesgBox(ByVal sMessage As String) 
    Dim serializer as New JavaScriptSerializer() 
    Dim msgedtble As String = serializer.Serialize(sMessage) 
    Page.ClientScript.RegisterStartupScript(Me.GetType, "myScripts", 
     "<script type='text/javascript'>alert(" & msgedtble & ");</script>") 
End Sub 

使用JavaScriptSerializer應該照顧的換行符,單引號,和其他一切,我們還沒有想到的。

+0

另外,它是VB.NET,所以它應該是'Imports System.Web.Script.Serialization',它應該在文件的開頭 – freefaller

+0

我相信JavaScriptSerializer會添加引號。我是一個PHP人,我知道json_encode添加了引號。 –

+0

@freefaller編輯... –

1

JavaScript不允許字符串常量跨越換行符。

在您的服務器端代碼中,您將不得不將錯誤消息中的換行符替換爲「\ n」。

+0

我做了你所說的。現在看看編輯過的腳本和函數。它仍然沒有被渲染。 – rahulserver

+0

您應該檢查瀏覽器錯誤控制檯以查看發生了什麼。瀏覽器會告訴你JavaScript錯誤;字符串中可能還有一些其他字符可以轉義。 *編輯* - 它看起來像字符串中有單引號字符。你可以使用雙引號代替,或者你可以去掉單引號,或者用「\」替換它們。 – Pointy

+0

檢查您的服務器端語言是否具有對JSON編碼的內置支持。如果是這樣,這將是編碼字符串的最佳方式。 –

1

要繼續使用Pointy提供的答案,您的消息包含'個字符,您需要轉義。

嘗試......

msgedtble = msgedtble.Replace(vbNewLine, "\n").Replace("'","\'") 

這也是最好有type='text/javascript'而非language='javascript' ......雖然這不是絕對必要的。

+0

也適用於我!謝謝!! :) – rahulserver

+0

這個答案仍然不健壯;例如,如果字符串中有反斜槓......使用JavaScriptSerializer是唯一安全的選擇。 –

+0

@rahulserver我很欣賞「正確的答案」,但你只能選擇一個問題......因爲你已經選擇了Mark的答案,我認爲他應該得到「tick」 – freefaller