文档的相对路径,从href传递到Javascript函数,返回斜杠和去掉句点

文档的相对路径,从href传递到Javascript函数,返回斜杠和去掉句点,javascript,asp.net,gridview,href,Javascript,Asp.net,Gridview,Href,我有一个带有asp:GridView控件的aspx页面,该控件列出了已上载的与法律案件相关的文档。GridView中的第一列是一系列href标记,如果单击这些标记,将在与该文档类型关联的默认程序中打开文档。文档的相对路径存储在SQL Server中。我使用DataBinder.Eval方法填充路径,然后将路径发送到打开文档的Javascript函数。例如,我有一个文档记录,其路径是DATA\AR000001\AttachFiles\Case11\2.txt。网格中定位点的标记如下所示: <

我有一个带有asp:GridView控件的aspx页面,该控件列出了已上载的与法律案件相关的文档。GridView中的第一列是一系列href标记,如果单击这些标记,将在与该文档类型关联的默认程序中打开文档。文档的相对路径存储在SQL Server中。我使用DataBinder.Eval方法填充路径,然后将路径发送到打开文档的Javascript函数。例如,我有一个文档记录,其路径是DATA\AR000001\AttachFiles\Case11\2.txt。网格中定位点的标记如下所示:

<ItemTemplate>
        <a href="javascript:void(0);" onclick="ViewAttachFile('<%#Databinder.Eval(Container.DataItem, "FullAttchPath") %>');">Open</a>
 </ItemTemplate>
如果我查看页面源,则相对路径与我预期的完全相同:

<a href="javascript:void(0);" onclick="ViewAttachFile('DATA\AR000001\AttachFiles\Case11\2.txt');">Open</a>
在ViewAttachFile上设置断点,但是,我发现以下内容正在传递给函数,请注意,所有反斜杠和文档名都已删除:

DATAAR000001AttachFilesCase11.txt这是来自文本可视化工具

我曾尝试在DataBinder.Eval调用中嵌入escape和replace函数,但没有成功,因为Javascript不是我的强项,我不确定这两个函数中的任何一个都是正确的解决方案。我还尝试完全绕过ViewAttachFile函数,并将链接编码为:

<a href="javascript:void(0);" onclick="javascript:window.open('<%#Databinder.Eval(Container.DataItem, "FullAttchPath") %>');">Open</a>
但这基本上会产生相同的结果,因为反斜杠会从URL中去掉,句点会转换为%02,打开的窗口会返回一个400错误,即错误请求无效URL。我想我可以在数据库的path列中加倍使用斜杠,但这似乎是个坏主意,我希望有一个更清晰的解决方案

非常感谢您的任何见解

这里有一个方法。快速,肮脏,不完整,但与基本知识给你的想法的要点

在代码隐藏中:

protected string changeSlashes(string filepath){
    // do work
    return filepath;
}
在前端代码中:

<%# changeSlashes(DataBinder.Eval(Container.DataItem, "FullAttchPath").ToString()) %>

由于这是一项新功能,而且我有足够的时间来实现,所以我决定将数据库中的反斜杠改为斜杠。看起来很好用。不知道为什么我一开始就用反斜杠。谢谢你的反馈

反斜杠是JavaScript字符串语法的一部分;它们是为特殊角色准备的。您应该使用JSON编码器在JavaScript源代码中包含该值。在代码中编写一个公共方法,将反斜杠更改为正斜杠。调用该方法并将数据传递给它。
<%# changeSlashes(DataBinder.Eval(Container.DataItem, "FullAttchPath").ToString()) %>