c# - 从代码后面输出Javascript时如何处理换行符

标签 c# javascript asp.net c#-3.0

我正在通过后台代码输出客户端函数调用

Page.ClientScript.RegisterStartupScript( this.GetType(), "supportItems", scriptCalls, true );

scriptCalls 包含对客户端函数的调用,该函数具有从数据库中获取的多个字符串参数,然后在 HTML 文本区域中显示参数,因此最终需要保留换行符。如果 DB 值包含换行符,则换行符将包含在输出的客户端脚本中,这当然会导致客户端脚本错误。

我尝试通过清理函数传递数据库值以替换换行符:

private string CleanJavaScriptString( string stringToClean )
{
    string cleanString = stringToClean.Replace( "'", "\'" );
cleanString = cleanString.Replace( Environment.NewLine, "\n" );
return cleanString;
}

但这仍然会输出代码中的实际换行符。我怎样才能做到这一点?

最佳答案

如果您有权访问它(从 .NET 3.5 开始),最好使用 JavaScriptSerializer...

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

这取自 this question/answer .

JavaScriptSerializer 的优点是它会处理引号、换行符 - 以及所有您可能没有想到的字符,这些字符会影响 JavaScript。

编辑

这里有一个 C# 等同于您所要求的......

private string CleanJavaScriptString( string stringToClean )
{
  System.Web.Script.Serialization.JavaScriptSerializer serializer = new 
    System.Web.Script.Serialization.JavaScriptSerializer();
  return serializer.Serialize(stringToClean);
}

关于c# - 从代码后面输出Javascript时如何处理换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432320/

相关文章:

c# - 32 位和 64 位 ASP.NET 部署

c# - 在使用 [Import(AllowDefault = true)] 之前未调用 MEF [ImportingConstructor]

c# - 创建对象族取决于字符串或枚举违反开闭原则

c# - 评估 LambdaExpression?

c# - log4net/EventLogAppender 忽略了我的 LogName

javascript - Jquery 对话框滑动

javascript - redux-saga 注入(inject)两次

asp.net - WebApi2 GET 上的 InvalidCastException 'HttpResponseMessage' 到 'IHttpActionResult'

javascript - 如何使用javascript更新代码的所有部分的一个变量的值?

asp.net - 'Microsoft.Jet.OLEDB.4.0' 提供程序未在本地计算机上注册