如何修改aspnet_client的默认路径【T】

cqgoodwolf 2009-04-25 11:45:56
各位大师,大家好,小弟遇到一个问题

小弟的系统发布后,水晶报表显示正常,通过修改toolbarimageurl和grouptreeurl,都修改成了aspnet_client/system_web/2_0...,使其访问程序文件夹里的aspnet_client,这样,水晶报表显示正常
但打印和导出无效,因为打印和导出要用的JS文件夹使用的是"/aspnet_client/system_web/2_0...",这个不是程序文件夹里的,而是系统里的。各位大师,请问如何修改,使其去掉那个斜杠。

不要教我在服务器上也拷贝个这个文件夹,因为不可行

小弟的服务器很复杂,是UNIX下,把这个虚拟目录映射过来的。。所以只能通过修改JS文件夹路径

谢谢各位。

...全文
277 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqgoodwolf 2009-04-29
  • 打赏
  • 举报
回复
http://www.xx.com/报表目录
http://www.xx.com/aspnet_client/system 。。。

中午测试这个方法
但愿成功

阿弥陀佛
cqgoodwolf 2009-04-29
  • 打赏
  • 举报
回复
阿泰大哥,你能不能帮我反编译一下CrystalDecisions.Web.dll,再修改后重新生成一个

谢谢啊
我这要急死了
阿泰 2009-04-29
  • 打赏
  • 举报
回复
理论上讲是这样子的,但是没有实际操作,所以不能断定。
cqgoodwolf 2009-04-29
  • 打赏
  • 举报
回复
阿泰,是不是反编译一下CrystalDecisions.Web.dll,再修改后重新生成就可以了?
cqgoodwolf 2009-04-28
  • 打赏
  • 举报
回复
阿泰,你说的确实正确

我要折腾疯了

5楼的方法我看也可行,可行我们那个UNIX环境下那个映射系统,不允许建带有下划线的ASPNET_CLIENT。。。

郁闷。继续求良方
阿泰 2009-04-28
  • 打赏
  • 举报
回复
问题是,水晶报表是硬编码的。
不管你怎么改/aspnet_client的位置
水晶报表取的还是/aspnet_client/ 这个位置。

你看一下7楼的代码
我觉得如果可以的话,反编译一下这个CrystalDecisions.Web.dll,改完再编译回来可能更好用些

我晚些尝试一下怎么把这个目录切出来,不过似乎不大行,呵呵。
简单点还是5楼的方式,我几种方法都试试看。

你的环境也太特殊了点,呵呵。
cqgoodwolf 2009-04-28
  • 打赏
  • 举报
回复
有人发帖问“aspnet_client必须放在web根目录吗?怎样改变这个路径?”
  我一开始猜想这个路径可能是硬编码的。为了证实一下,就打开了Reflector,试图寻找到类似"/aspnet_client/system_web/1_1_4322/"的字符串,却发现这个目录的位置是可以自定义的,但是MSDN中没有公开。相关代码在System.Web.UI.Util.GetScriptLocation(HttpContext)中,
1internal static string GetScriptLocation(HttpContext context)
2...{
3 string text1 = null;
4 IDictionary dictionary1 = (IDictionary) context.GetConfig("system.web/webControls");
5 if (dictionary1 != null)
6 ...{
7 text1 = (string) dictionary1["clientScriptsLocation"];
8 }
9 if (text1 == null)
10 ...{
11 throw new HttpException(HttpRuntime.FormatResourceString("Missing_clientScriptsLocation"));
12 }
13 if (text1.IndexOf("") >= 0)
14 ...{
15 string text2 = "system_web";
16 string text3 = VersionInfo.IsapiVersion.Substring(0, VersionInfo.IsapiVersion.LastIndexOf('.')).Replace('.', '_');
17 text1 = string.Format(text1, text2, text3);
18 }
19 return text1;
20}

  然后再machine.config中找到了默认的配置:
  <webControls clientScriptsLocation="/aspnet_client///" />
  当然也可以在web.config中针对单个应用程序进行配置。如果要把aspnet_client目录放在根目录下的myweb中,那么就在web.config文件的
<configuration>
<system.web>
标签内加上这么一句:
<webControls clientScriptsLocation="/myweb/aspnet_client///" />
  或者直接写
<webControls clientScriptsLocation="/myweb/aspnet_client/system_web/1_1_4322/" />

阿泰,这个方法可行不?我测试了一下,没成功
阿泰 2009-04-27
  • 打赏
  • 举报
回复
这个我倒没做过,你反编译一下CrystalDecisions.Web.dll,
他的路径是这么存在
public static string get_ASPNETClientFolderURL()
{
System.Reflection.Assembly assembly = typeof(System.Web.HttpRequest).Assembly;
System.Reflection.AssemblyFileVersionAttribute assemblyFileVersionAttribute = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false)[0] as System.Reflection.AssemblyFileVersionAttribute;
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
stringBuilder.Append("/aspnet_client/");
System.Security.Permissions.FileIOPermission fileIOPermission = new System.Security.Permissions.FileIOPermission(System.Security.Permissions.PermissionState.Unrestricted);
fileIOPermission.Assert();
stringBuilder.Append(assembly.GetName().Name.Replace('.', '_'));
System.Security.CodeAccessPermission.RevertAssert();
stringBuilder.Append("/");
stringBuilder.Append(assemblyFileVersionAttribute.Version.Substring(0, assemblyFileVersionAttribute.Version.LastIndexOf('.')).Replace('.', '_'));
return stringBuilder.ToString();
}

这个是取得
../aspnet_client/System_Web/2_0_50727

这个是组件主动附加到路径上去的。

有时间我尝试去修改一下看看

当然,你也可以用js方法,主动把这个路径替换掉。不过这样可能会有问题,因为有些依赖js文件里的路径也是写死的好像,也是要去一个个改的。

我建议你还是用5楼的方法
cqgoodwolf 2009-04-27
  • 打赏
  • 举报
回复
能不能手工修改,使程序访问aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/js
而不是“/aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/js”
阿泰 2009-04-27
  • 打赏
  • 举报
回复



这个替换,只保证你找到了那个js,但是并不能保证那个js能正常工作
因为这个替换只替换了当前页面,不可能更改到js里面的内容的。
所以你可能还需要去改一下js里面的内容。
cqgoodwolf 2009-04-27
  • 打赏
  • 举报
回复
谢谢
已经替换成功

不过没达到效果


好像aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/JS没调用到自己程序里的JS文件夹
阿泰 2009-04-27
  • 打赏
  • 举报
回复
从语法上,是需要return的,当然,不return也能实现这个效果。

你说的没效果,是仍然有红叉叉吧,你后面用来替换的那个地址对吗?呵呵。
cqgoodwolf 2009-04-27
  • 打赏
  • 举报
回复
阿泰,你的代码,我测试了下
没效果,汗,没替换过来

还有
页面 <body>中增加一个onload="oh();" ,不是 return oh()吧
_see_you_again_ 2009-04-27
  • 打赏
  • 举报
回复
src=js"~/aspnet_client/System_Web/2_0_50727"
阿泰 2009-04-27
  • 打赏
  • 举报
回复
你可以用JS的方法,不过注意我在7楼说的问题。

在页面上增加一个js函数
function oh(){
document.write(document.documentElement.innerHTML.replace('../aspnet_client/System_Web/2_0_50727/这个是你页面HTML里的路径','你自己的实际路径'));
return false;

//return true;
}
</script>

页面<body>中增加一个onload="return oh();"



cqgoodwolf 2009-04-27
  • 打赏
  • 举报
回复
谢谢阿泰

5楼那方法,我们这边制度不可行,唉。。

只能修改JS文件夹位置。。也就是去掉“/”
阿泰 2009-04-25
  • 打赏
  • 举报
回复
虽然不知道你是如何映射到Unix上的

但是既然你能映射报表文件的目录,那么也能映射aspnet_client/system。。。这个目录啊

把这另个都映射到同一个根域名下面不就可以了吗?

http://www.xx.com/报表目录
http://www.xx.com/aspnet_client/system 。。。

这个原理是一样的啊。
cqgoodwolf 2009-04-25
  • 打赏
  • 举报
回复
大家可以看到
我已经手工将"/"拿掉了
可程序运行后,还是调用的/aspnet_client下的JS文件
如何设置成程序中的aspnet_client,而不用系统中的
cqgoodwolf 2009-04-25
  • 打赏
  • 举报
回复
大家可以看到
我已经手工将"/"拿掉了
可程序运行后,还是调用的/aspnet_client下的JS文件
如何设置成程序中的aspnet_client,而不用系统中的
cqgoodwolf 2009-04-25
  • 打赏
  • 举报
回复
楼上的兄弟
能不能详细点,谢谢
下面是我测试页面的源码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<%@ Register Assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<link href="aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css"
rel="stylesheet" type="text/css" />
<link href="aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css"
rel="stylesheet" type="text/css" />
<link href="aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css"
rel="stylesheet" type="text/css" />
<link href="aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css"
rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: center">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true"
EnableDatabaseLogonPrompt="False" HasCrystalLogo="False" HasToggleGroupTreeButton="False" HasViewList="False" DisplayGroupTree="False" GroupTreeImagesFolderUrl="aspnet_client/system_web/2_0_50727/CrystalReportWebFormViewer3/Images/Tree/" ToolbarImagesFolderUrl="aspnet_client/system_web/2_0_50727/CrystalReportWebFormViewer3/Images/ToolBar/" />
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
</CR:CrystalReportSource>
</div>
</form>

</body>
</html>
加载更多回复(1)

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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