Javascript警报无法从代码隐藏中工作

Javascript警报无法从代码隐藏中工作,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我正在从asp.net(vb)中的codebehind生成一个javascript警报框 守则: Catch ex As Exception MesgBox("Error in uploading file due to following exception" & vbNewLine & ex.ToString) trans.Rollback() Finally

我正在从asp.net(vb)中的codebehind生成一个javascript警报框

守则:

            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
Private Sub-MesgBox(ByVal-sMessage作为字符串)
Dim msgedtble As String=sMessage.Replace(“\”,“\\”)
msgedtble=msgedtble.Replace(vbNewLine,“\n”)
Page.ClientScript.RegisterStartupScript(Me.GetType,
“myScripts”,
“警报(“&msgedtble&“);”)
端接头
现在,当抛出异常时,以下脚本将附加到客户端html的form标记中:

        <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>
alert('由于以下异常导致上载文件时出错\nSystem.Data.SqlClient.SqlException(0x80131904):违反唯一密钥约束“IX_AccountMaster”。无法在对象“dbo.AccountMaster”中插入重复密钥。\n该语句已终止。\n位于System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs RowUpdateEvent,BatchCommandInfo[]batchCommands,Int32 commandCount)\n位于System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs RowUpdateEvent,BatchCommandInfo[]batchCommands,Int32 commandCount)\n位于System.Data.Common.DbDataAdapter.Update(DataRow[]dataRows,DataTableMapping tableMapping tableMapping)\n位于System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable DataTable,DataTableMapping tableMapping)\n位于System.Data.Common.DbDataAdapter.Update(DataTable DataTable DataTable)\n位于UploadAccountMasterXl.Button1\u单击(对象发送方,事件参数e)在C:\\Users\\ssaa\\Documents\\visualstudio 2010\\WebSites\\Dpp2012\\UploadAccountMasterXl.aspx.vb:line 57');

为什么我的浏览器(Firefox)中没有出现这种情况?

JavaScript不允许字符串常量跨越换行符


在服务器端代码中,必须将错误消息中的换行符替换为“\n”。

JavaScript不允许字符串常量跨越换行符


在服务器端代码中,您必须将错误消息中的换行符替换为“\n”。

要继续使用Pointy给出的答案,您的消息包含
字符,您需要对这些字符进行转义

试试这个

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

使用
type='text/javascript'
也比使用
language='javascript'
更好,尽管这不是绝对必要的。

要继续使用Pointy给出的答案,您的消息包含
'
字符,需要转义

试试这个

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

最好将
type='text/javascript'
放在文件顶部,而不是
language='javascript'
。将
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
Private Sub-MesgBox(ByVal-sMessage作为字符串)
Dim序列化程序作为新的JavaScriptSerializer()
Dim msgedtble As String=serializer.Serialize(sMessage)
Page.ClientScript.RegisterStartupScript(Me.GetType,“myScripts”,
“警报(&msgedtble&;”)
端接头

使用JavaScriptSerializer应该注意换行符、单引号以及我们尚未想到的所有其他内容。

导入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
Private Sub-MesgBox(ByVal-sMessage作为字符串)
Dim序列化程序作为新的JavaScriptSerializer()
Dim msgedtble As String=serializer.Serialize(sMessage)
Page.ClientScript.RegisterStartupScript(Me.GetType,“myScripts”,
“警报(&msgedtble&;”)
端接头

使用JavaScriptSerializer应该注意换行符、单引号以及我们尚未想到的所有其他内容。

我按照你说的做了。现在查看已编辑的脚本和函数。它仍然没有被渲染。你应该检查浏览器错误控制台以查看发生了什么。浏览器将告诉你有关JavaScript错误的信息;在那里字符串中可能有其他字符要转义。编辑-字符串中似乎有单引号字符。您可以在其周围使用双引号,也可以去掉单引号,或将其替换为“\”。检查您的服务器端语言是否内置了对JSON编码的支持。如果有,这将是对字符串进行编码的最佳方式。我按照您说的做了。现在查看已编辑的脚本和函数。它仍然没有被呈现。您应该检查浏览器错误控制台以查看发生了什么。浏览器将告诉您有关JavaScript错误的信息;t字符串中可能还有一些其他字符需要转义。编辑-字符串中似乎有单引号字符。您可以在其周围使用双引号,也可以去掉单引号,或将其替换为“\”。检查您的服务器端语言是否内置了对JSON编码的支持。如果有,这将是对字符串进行编码的最佳方式。此外,它是VB.NET,因此应该是
Imports System.Web.Script.Serialization
,并且应该是在文件的一开始。我相信JavaScriptSerializer会添加引号。我是一名PHP人员,一名我知道json_encode添加了引号。很棒的Mark!像宝石一样工作!足够公平@Mark…因为我没有使用这个类,所以我真的不应该评论!-)(显然它是有效的,我肯定是错的!)将删除我的原始版本comment@rahulserver很难说没有看到你的代码。。。您是多次呼叫MesgBox,还是向其传递多条消息?如果要多次调用MesgBox,可能必须确保Page.ClientScript.RegisterStartupScript()的第二个参数是唯一的,而不是每次都是“myScripts”。另外,请仔细阅读,它是VB.NET,因此应该是Imports System.Web.Script.Serialization,并且应该是在文件的最开始,我相信JavaScriptSerializer会添加引号。我是一个PHP爱好者,我知道json_encode添加了引号。太棒了!像宝石一样工作!很公平@Mark。。。因为我没有使用