简体   繁体   English

从C#内联代码的结果在JavaScript中创建正确的字符串

[英]Create a correct string in JavaScript from result of C# inline code

I have to use some inline code in my asp.net application. 我必须在我的asp.net应用程序中使用一些内联代码。 Fe i have following inline code: 我有以下内联代码:

<% FlashRenderer.Render(); %>

That will return me following markup: 这将在标记后返回我:

<div id="flashGame" style="color:red"></div>
  <script type="text/javascript" language="javascript">
     var flash = document.getElementById('flashGame');
     ...
  </script>
</div>

I need to assign a result of FlashRenderer.Render() to javascript variable, then using jquery append that markup to some parent div. 我需要将FlashRenderer.Render()的结果分配给javascript变量,然后使用jquery将该标记附加到某个父div。 I try follwing: 我试着跟随:

   <script type="text/javascript">
       var swfString = '<%= FlashRenderer.Render() %>';
       $("swf").append(swfString);
   </script>

And it fails, because result string from inline inclusion has both single and double quotes, so when i use single quotes to wrap '<%= FlashRenderer.Render() %>' i always have a syntax error in browser console. 它失败了,因为内联包含的结果字符串有单引号和双引号,所以当我使用单引号来包装'<%= FlashRenderer.Render() %>'我总是在浏览器控制台中出现语法错误。 I try to replace "'" with "\\'" but error happens before i got string created. 我尝试用“\\”替换“'”,但在创建字符串之前发生错误。

Here is screenshot what i have after try to use JavaScriptSerializer().Serialize 这是我尝试使用JavaScriptSerializer()之后的截图。序列化

语法错误

You can use a JSON serializer, which will give you a Javascript-safe string, including the quotes, and it will handle the line breaks as well: 您可以使用JSON序列化程序,它将为您提供包含引号的Javascript安全字符串,并且它还将处理换行符:

--JSON.NET--:
var x = <%= JsonConvert.SerializeObject(FlashRenderer.Render()) %>;

or

--System.Web.Script.Serialization--:
var x = <%= new JavaScriptSerializer().Serialize(FlashRenderer.Render()) %>;

This will render something like: 这将呈现如下内容:

var x = "<div id=\"flashGame\" style=\"color:red\"></div>\r\n   <script type=\"text/javascript\" ...etc... </div>";

Instead of trying to place it in a string, just have it render hidden on the page and move it: 不要试图将它放在一个字符串中,只需将它隐藏在页面上并移动它:

<div style="display:none">
  <%= FlashRenderer.Render() %>
</div>

<script type="text/javascript">
  $("swf").append($("#flashGame"));
</script>

Hacky solution if you can't modify the C# code. Hacky解决方案,如果你不能修改C#代码。 Output the function into a textarea then get the value of the textarea with jQuery. 将函数输出到textarea然后使用jQuery获取textarea的值。

<textarea id="swfref" style="display:none;">
<% FlashRenderer.Render(); %>
</textarea>

<script type="text/javascript">
    var swfString = $("#swfref").val();
    $("swf").append(swfString);
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM