如何将ASP.net变量的值放入javascript文本框

如何将ASP.net变量的值放入javascript文本框,javascript,asp.net,Javascript,Asp.net,我正在为ASP.net页面编写一些Javascript代码 我将字符串“foo”分配给字符串变量myString 我想将myString的值分配给一个JavaScript变量,因此我在ASP.net代码中编写: <script type='txt/javascript' language='javascript'> var stringFromDotNet = '<%=myString%>'; </script> var stringFromDot

我正在为ASP.net页面编写一些Javascript代码

我将字符串“foo”分配给字符串变量
myString

我想将
myString
的值分配给一个JavaScript变量,因此我在ASP.net代码中编写:

<script type='txt/javascript' language='javascript'>
    var stringFromDotNet = '<%=myString%>';
</script>

var stringFromDotNet='';
只要
myString
不包含引号或换行符,这就可以正常工作,但只要我尝试分配带有引号或换行符的内容,所有内容都会丢失,我的代码就无法工作。事实上,我可以看出这段代码容易受到各种注入攻击

所以。。。在JavaScript中,如何将
myString
的值分配给变量


更新:我尝试创建一个页面,其中只有一个ASP:隐藏字段。看起来里面的值是html编码的。

我想这可能就是我们想要的答案:。基本上,在服务器端对值进行编码,并使用JavaScript对其进行取消编码:

var stringFromDotNet = decodeURI(<%=Server.URLEncode(myString)%>);
var stringFromDotNet=decodeURI();

这将确保引号和其他危险字符不会破坏您的脚本,或打开攻击向量。

我认为这可能就是您要寻找的答案:。基本上,在服务器端对值进行编码,并使用JavaScript对其进行取消编码:

var stringFromDotNet = decodeURI(<%=Server.URLEncode(myString)%>);
var stringFromDotNet=decodeURI();

这将确保引号和其他危险字符不会破坏您的脚本,或打开攻击向量。

您可以像这样使用双引号分配js变量

var stringFromDotNet = "<%=myString%>";
var stringFromDotNet=“”;

或者您可以在服务器端的字符串中转义单引号并用文本“\r\n”替换换行符。

您可以使用双引号分配js变量,如下所示

var stringFromDotNet = "<%=myString%>";
var stringFromDotNet=“”;
或者,您可以在服务器端的字符串中转义单引号并用文本“\r\n”替换换行符。

您可以使用,这保证对XSS是安全的:

<script type="text/javascript">
    var stringFromDotNet = <%= new JavaScriptSerializer().Serialize(myString) %>;
</script>

var stringFromDotNet=;
此方法还允许您传递复杂对象,而不仅仅是普通字符串:

<script type="text/javascript">
    var complexObjectFromDotNet = <%= new JavaScriptSerializer().Serialize(new { id = 123, name = "foo\"' <bar>" }) %>;
    alert(complexObjectFromDotNet.name);
</script>

var complexObjectFromDotNet=您可以使用,并且保证对XSS安全:

<script type="text/javascript">
    var stringFromDotNet = <%= new JavaScriptSerializer().Serialize(myString) %>;
</script>

var stringFromDotNet=;
此方法还允许您传递复杂对象,而不仅仅是普通字符串:

<script type="text/javascript">
    var complexObjectFromDotNet = <%= new JavaScriptSerializer().Serialize(new { id = 123, name = "foo\"' <bar>" }) %>;
    alert(complexObjectFromDotNet.name);
</script>


var complexObjectFromDotNet=这不起作用,因为这样我的用户就不能使用双引号,而且我仍然很容易受到攻击。你必须避开引号。如果使用双引号分配js变量,则必须转义字符串中的双引号。您的用户不会受到影响。您必须在将值分配给myString时转义字符串。这不起作用,因为这样我的用户就不能使用双引号,而且我仍然容易受到攻击。您必须转义引号。如果使用双引号分配js变量,则必须转义字符串中的双引号。您的用户不会受到影响。在将值赋给myString时,必须对字符串进行转义。