62,046
社区成员
发帖
与我相关
我的任务
分享
protected void Button1_Click(object sender, EventArgs e)
{
this.xStr = this.TextBox1;
}
那么就一定要写 <script type="text/javascript">
var x = '<%= this.xStr!=null? this.xStr.Replace("\\","\\\\"): "" %>';
var y = '<%= this.IsPostBack %>' == 'True';
if (y)
window.alert(x);
</script>
当你认为 xStr 就是普通的 c# 字符串时,那么就要使用第二种形式来编写程序。var file='<%=this.FileToDelete.Replace("\\","\\\\") %>'
通用的形式,就一定要进行转义,将一个 \ 符号变为两个 \ 符号。
我给你写一个例子:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<table border="0">
<tr>
<td>请输入要赋值给(拼接到) javascript 代码段中的字符串:</td>
<td>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td></td>
<td>
<asp:Button ID="Button1" runat="server" Text="好啦" OnClick="Button1_Click" /></td>
</tr>
</table>
</form>
<script type="text/javascript">
var x = '<%= this.xStr %>';
var y = '<%= this.IsPostBack %>'=='True';
if (y)
window.alert(x);
</script>
</body>
</html>
using System;
public partial class _Default : System.Web.UI.Page
{
protected string xStr;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
this.xStr = this.TextBox1.Text.Replace("\\", "\\\\");
}
}
你可以把 Replace 去掉再来试试看,自己设计一个输入,看有输出没有 bug。
这其实就好像是所谓的“SQL注入”一样的,有时候是个噱头。除非是明知道字符串常量中不可能有单引号,否则就一定要在拼sql语句的字符串常量时,把单引号改为两个单引号,那才符合 sql 语句的语法。
这里也是一样!除非是明知道变量里边不可能有 \ 符号,否则就一定要写 Replace。这样才是考虑到了符合 javascript 语法的 c# 代码。