页面js获取后置代码中的变量的问题,该变量为文件路径

NorthrendSnow 2017-02-24 03:39:23
后置代码中有变量

private string fileToDelete="D:\\RTC_workspace_vs\\LU14_前端组件\\WsCVMSite\\FileServiceWeb\\636235466657342844.html";
public string FileToDelete
{
get { return fileToDelete; }
}

页面js使用 var file=<%=this.FileToDelete%>,然后file怎么变成"D:RTC_workspace_vsLU14_前端组件WsCVMSiteFileServiceWeb636235466657342844.html"了?
就是文件路径分隔符没了!!!求大神教我!!!
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸡公山汤圆 2019-06-05
  • 打赏
  • 举报
回复
3楼正解达···············································
insus 2017-04-08
  • 打赏
  • 举报
回复
参考:


  • 打赏
  • 举报
回复
很显然,上述代码,假设你要写
    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# 字符串时,那么就要使用第二种形式来编写程序。
  • 打赏
  • 举报
回复
通过测试你可以看到,绝不是把 this.TextBox1.Text 原样赋值给 this.xStr。 如果不求甚解地以为仅仅是这里有个“特殊情况”,那么你这个知识点就可能糊涂地死记硬背,就会误了大事。
  • 打赏
  • 举报
回复
\ 符号是 jaavscript 字符串转义符,所以字符串中如有 \ 符号应该写两个 \ 才行。所以其实简单拼接 javascript 的字符串如果有 \ 符号就应该变为两个 \ 。例如写
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# 代码。
  • 打赏
  • 举报
回复
引用 1 楼 insus 的回复:
参考:
正解

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧