一般我们使用这个treeview控件时都是在虚拟目录下复制webctrl_client目录到默认网站的根目录下,其实这对开发人员只是很简单的一个步骤,但是在打包部署的时候确碰到了问题,假设你的网站是安装在虚拟目录下,你怎么使你的安装程序自动复制这个目录到相应的地方去呢,这是个问题
.于是google,下载了
http://www.microsoft.com/china/MSDN/library/archives/library/DNAspp/html/aspnet-usingtreeviewieWebcontrol.asp里wencontrols的代码并安装,查看treeview.cs,终于找到主要是AddPathToFilename这个函数来控制目录得,而这个函数在BaseRichControl.cs的抽象类里定义
,本来开始的想法是改这个函数,后来发现其实它还有个可配置的路径接口,还是先配置吧!
于是在web.config加入以下节
注意:configSections一定要放在第一个子节最前面.
剪切默认网站的webctrl_client目录到虚拟目录web/treepath/下,运行程序, 树型界面出现了,只是前面的加减号出现问题,再右键查看WEB代码,发现SystemImagesPath属性还是指到webctrl_client目录下,看了SystemImagesPath的代码,把treeview控件的SystemImagesPath设置为空,再次运行程序,OK!全部通过,treeview的图片目录再也不需要依赖默认网站的图片目录了,打包也变的方便了,如果是几个网站在一个机器上,你也可以设置自己独立的treeview图片风格了,嘿嘿,再此写下这些供大家参考
//
--------------------------------------------------------------------
// Common Files
// --------------------------------------------------------------------
/**/ /// <summary>
/// Adds the common file path to the filename.
/// </summary>
/// <param name="filename">The filename to qualify with the common path.</param>
/// <returns>The full path of the filename with the common path.</returns>
protected string AddPathToFilename( string filename)
{
return AddPathToFilename(Context, filename);
}
/**/ /// <summary>
/// Static version of AddPathToFilename so that classes not deriving from
/// BaseRichControl can still find the common files path.
/// </summary>
/// <param name="context">The context from which to get the configuration.</param>
/// <param name="filename">The filename to qualify with the common path.</param>
/// <returns>The full path of the filename with the common path.</returns>
internal static string AddPathToFilename(HttpContext context, string filename)
{
return FindCommonPath(context) + filename;
}
/**/ /// <summary>
/// Finds the path for client files used be server controls.
/// </summary>
/// <param name="context">The context from which to get the configuration.</param>
/// <returns>The path name.</returns>
private static string FindCommonPath(HttpContext context)
{
// Look at the current configuration for the path
if (context != null)
{
NameValueCollection table = (NameValueCollection)context.GetConfig(ConfigName);
if (table != null)
{
string path = (string)table[CommonFilesKey];
if (path != null)
{
return CleanupPath(path);
}
}
}
// Return the default path with version number
Assembly assembly = typeof(BaseRichControl).Assembly;
Version version = assembly.GetName().Version;
return DefaultCommonFilesRoot + version.Major.ToString() + "_" + version.Minor.ToString() + "/";
}
// Common Files
// --------------------------------------------------------------------
/**/ /// <summary>
/// Adds the common file path to the filename.
/// </summary>
/// <param name="filename">The filename to qualify with the common path.</param>
/// <returns>The full path of the filename with the common path.</returns>
protected string AddPathToFilename( string filename)
{
return AddPathToFilename(Context, filename);
}
/**/ /// <summary>
/// Static version of AddPathToFilename so that classes not deriving from
/// BaseRichControl can still find the common files path.
/// </summary>
/// <param name="context">The context from which to get the configuration.</param>
/// <param name="filename">The filename to qualify with the common path.</param>
/// <returns>The full path of the filename with the common path.</returns>
internal static string AddPathToFilename(HttpContext context, string filename)
{
return FindCommonPath(context) + filename;
}
/**/ /// <summary>
/// Finds the path for client files used be server controls.
/// </summary>
/// <param name="context">The context from which to get the configuration.</param>
/// <returns>The path name.</returns>
private static string FindCommonPath(HttpContext context)
{
// Look at the current configuration for the path
if (context != null)
{
NameValueCollection table = (NameValueCollection)context.GetConfig(ConfigName);
if (table != null)
{
string path = (string)table[CommonFilesKey];
if (path != null)
{
return CleanupPath(path);
}
}
}
// Return the default path with version number
Assembly assembly = typeof(BaseRichControl).Assembly;
Version version = assembly.GetName().Version;
return DefaultCommonFilesRoot + version.Major.ToString() + "_" + version.Minor.ToString() + "/";
}
,本来开始的想法是改这个函数,后来发现其实它还有个可配置的路径接口,还是先配置吧!
于是在web.config加入以下节
<
configSections
>
< section name ="MicrosoftWebControls" type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ configSections >
< MicrosoftWebControls >
< add key ="CommonFiles" value ="/web/treepath/" ></ add >
</ MicrosoftWebControls >
< section name ="MicrosoftWebControls" type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ configSections >
< MicrosoftWebControls >
< add key ="CommonFiles" value ="/web/treepath/" ></ add >
</ MicrosoftWebControls >
注意:configSections一定要放在第一个子节最前面.
剪切默认网站的webctrl_client目录到虚拟目录web/treepath/下,运行程序, 树型界面出现了,只是前面的加减号出现问题,再右键查看WEB代码,发现SystemImagesPath属性还是指到webctrl_client目录下,看了SystemImagesPath的代码,把treeview控件的SystemImagesPath设置为空,再次运行程序,OK!全部通过,treeview的图片目录再也不需要依赖默认网站的图片目录了,打包也变的方便了,如果是几个网站在一个机器上,你也可以设置自己独立的treeview图片风格了,嘿嘿,再此写下这些供大家参考
“而是只有你部署的那个程序用了”
不正是private么,我都要糊涂了
这里有篇文章
http://www.aspcool.com/lanmu/browse1.asp?ID=1183&bbsuser=aspnet 回复
不正是private么,我都要糊涂了
这里有篇文章
http://www.aspcool.com/lanmu/browse1.asp?ID=1183&bbsuser=aspnet 回复
web config 是不是应该这样写啊?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<MicrosoftWebControls>
<add key="CommonFiles" value="/web/treepath/"></add>
</MicrosoftWebControls> 回复
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<MicrosoftWebControls>
<add key="CommonFiles" value="/web/treepath/"></add>
</MicrosoftWebControls> 回复
我使用installshield打包,可以在把webctrl_client目录写到wwwroot目录下。不过在web.config加入以下节
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<MicrosoftWebControls>
<add key="CommonFiles" value="/web/treepath/"></add>
</MicrosoftWebControls>
还是很有用的,简化了打包文件的制作 ;谢谢咯 回复
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<MicrosoftWebControls>
<add key="CommonFiles" value="/web/treepath/"></add>
</MicrosoftWebControls>
还是很有用的,简化了打包文件的制作 ;谢谢咯 回复
to ttyp
你好,我已按照你的方法做了,但还是不行,不仅没图片也没平常的效果了,
这是什么原因呢。。会不会是因ieWebControl的版本不同而设置也不同呢?
我用的是 已打包好的直接安装的MSI程序。。请指教。。 回复
你好,我已按照你的方法做了,但还是不行,不仅没图片也没平常的效果了,
这是什么原因呢。。会不会是因ieWebControl的版本不同而设置也不同呢?
我用的是 已打包好的直接安装的MSI程序。。请指教。。 回复
<add key="CommonFiles" value="/webctrl_client/1_0/"></add>
的VALUE值是相对虚拟目录而言的,而SystemImagesPath的正确指向应该是到webctrl_client/1_0/treeimages
比如我照上面的设置 那么
>? tv.SystemImagesPath
"/webctrl_client/1_0/treeimages/"
就证明引用正确了 回复
的VALUE值是相对虚拟目录而言的,而SystemImagesPath的正确指向应该是到webctrl_client/1_0/treeimages
比如我照上面的设置 那么
>? tv.SystemImagesPath
"/webctrl_client/1_0/treeimages/"
就证明引用正确了 回复
我的思路对不对?
如果把虚拟目录名加到里面其不是理不爽了吗?
安装部署时的虚拟目录名是可先的,这其不是又给安装部署时添加麻烦吗?
我还是保存原有的安装部署(把webctrl_client复制到站点目录下) 回复
如果把虚拟目录名加到里面其不是理不爽了吗?
安装部署时的虚拟目录名是可先的,这其不是又给安装部署时添加麻烦吗?
我还是保存原有的安装部署(把webctrl_client复制到站点目录下) 回复
配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 创建 MicrosoftWebControls 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
源错误:
行 4: <!--自配置节-->
行 5: <configSections>
行 6: <section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler,System,Version=1.0.2.226,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>
行 7: </configSections>
行 8: <MicrosoftWebControls>
源文件: d:/inetpub/wwwroot/webkpbbs/web.config 行: 6
程序集加载跟踪: 下列信息有助于确定程序集“System, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35”无法加载的原因。
警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog]。
回复
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 创建 MicrosoftWebControls 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
源错误:
行 4: <!--自配置节-->
行 5: <configSections>
行 6: <section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler,System,Version=1.0.2.226,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>
行 7: </configSections>
行 8: <MicrosoftWebControls>
源文件: d:/inetpub/wwwroot/webkpbbs/web.config 行: 6
程序集加载跟踪: 下列信息有助于确定程序集“System, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35”无法加载的原因。
警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog]。
回复
你好,有人问用C# .net2 代码实现树形目录,但是不用treeview的图片,代码如下(我测试了怎么都不显示树形标):
Default.aspx的代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</Nodes>
</asp:TreeView>
</div>
</form>
</body>
</html>
Default.aspx.cs的代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
回复
Default.aspx的代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点">
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
<asp:TreeNode Text="新建节点" Value="新建节点"></asp:TreeNode>
</Nodes>
</asp:TreeView>
</div>
</form>
</body>
</html>
Default.aspx.cs的代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
回复
不用设置web.config文件,我已经在本地模拟虚机环境测试过,可以正常显示。
模拟的环境:win2003中文企业版,.net2.0(版本号:2.0.50727.42),net2的中文简体语言包不用安装也可以正常显示测试代码。就是放到真正的虚机环境上不行了,因为这个代码是不要Microsoft.Web.UI.WebControls 方式需要图片文件来显示树形的方式的。而用Microsoft.Web.UI.WebControls 方式就是你上面所说的我放在真正虚拟环境里已经测试正常,哈哈,就是我现在所要的这种不正常,郁闷得很!
检查过c:/windows/microsoft.net ;c:/windows/temp;c:/windows/IIS Temporary Compressed Files等目录的权限感觉都很正常,不知道我说得这种方式还需要什么目录或什么dll文件得特定权限呢?现在我想问题就出现在权限上,而不是net版本不对或也非什么控件没装引起。 回复
模拟的环境:win2003中文企业版,.net2.0(版本号:2.0.50727.42),net2的中文简体语言包不用安装也可以正常显示测试代码。就是放到真正的虚机环境上不行了,因为这个代码是不要Microsoft.Web.UI.WebControls 方式需要图片文件来显示树形的方式的。而用Microsoft.Web.UI.WebControls 方式就是你上面所说的我放在真正虚拟环境里已经测试正常,哈哈,就是我现在所要的这种不正常,郁闷得很!
检查过c:/windows/microsoft.net ;c:/windows/temp;c:/windows/IIS Temporary Compressed Files等目录的权限感觉都很正常,不知道我说得这种方式还需要什么目录或什么dll文件得特定权限呢?现在我想问题就出现在权限上,而不是net版本不对或也非什么控件没装引起。 回复
<MicrosoftWebControls>
<add key="CommonFiles" value="/website/webctrl_client/1_0" />
</MicrosoftWebControls>
但不知道究竟这个CommonFiles是怎样修改啊?
我的程序就把"webctrl_client/1_0"是放到虚拟目录下的Admin/Images/webctrl_client/1_0
我试过怎样修改都不行啊!! 回复
# re: 关于设置WebControls里的treeview控件的图片路径 2005-06-01 09:47 mancini
评论
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
谢谢!