设置WebControls里的treeview控件的图片路径的步骤
一般我们使用这个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图片风格了,嘿嘿,再此写下这些供大家参考
//--------------------------------------------------------------------
//CommonFiles
//--------------------------------------------------------------------
///<summary>
///Addsthecommonfilepathtothefilename.
///</summary>
///<paramname="filename">Thefilenametoqualifywiththecommonpath.</param>
///<returns>Thefullpathofthefilenamewiththecommonpath.</returns>
protectedstringAddPathToFilename(stringfilename)
{
returnAddPathToFilename(Context,filename);
}
///<summary>
///StaticversionofAddPathToFilenamesothatclassesnotderivingfrom
///BaseRichControlcanstillfindthecommonfilespath.
///</summary>
///<paramname="context">Thecontextfromwhichtogettheconfiguration.</param>
///<paramname="filename">Thefilenametoqualifywiththecommonpath.</param>
///<returns>Thefullpathofthefilenamewiththecommonpath.</returns>
internalstaticstringAddPathToFilename(HttpContextcontext,stringfilename)
{
returnFindCommonPath(context)+filename;
}
///<summary>
///Findsthepathforclientfilesusedbeservercontrols.
///</summary>
///<paramname="context">Thecontextfromwhichtogettheconfiguration.</param>
///<returns>Thepathname.</returns>
privatestaticstringFindCommonPath(HttpContextcontext)
{
//Lookatthecurrentconfigurationforthepath
if(context!=null)
{
NameValueCollectiontable=(NameValueCollection)context.GetConfig(ConfigName);
if(table!=null)
{
stringpath=(string)table[CommonFilesKey];
if(path!=null)
{
returnCleanupPath(path);
}
}
}
//Returnthedefaultpathwithversionnumber
Assemblyassembly=typeof(BaseRichControl).Assembly;
Versionversion=assembly.GetName().Version;
returnDefaultCommonFilesRoot+version.Major.ToString()+"_"+version.Minor.ToString()+"/";
}
//CommonFiles
//--------------------------------------------------------------------
///<summary>
///Addsthecommonfilepathtothefilename.
///</summary>
///<paramname="filename">Thefilenametoqualifywiththecommonpath.</param>
///<returns>Thefullpathofthefilenamewiththecommonpath.</returns>
protectedstringAddPathToFilename(stringfilename)
{
returnAddPathToFilename(Context,filename);
}
///<summary>
///StaticversionofAddPathToFilenamesothatclassesnotderivingfrom
///BaseRichControlcanstillfindthecommonfilespath.
///</summary>
///<paramname="context">Thecontextfromwhichtogettheconfiguration.</param>
///<paramname="filename">Thefilenametoqualifywiththecommonpath.</param>
///<returns>Thefullpathofthefilenamewiththecommonpath.</returns>
internalstaticstringAddPathToFilename(HttpContextcontext,stringfilename)
{
returnFindCommonPath(context)+filename;
}
///<summary>
///Findsthepathforclientfilesusedbeservercontrols.
///</summary>
///<paramname="context">Thecontextfromwhichtogettheconfiguration.</param>
///<returns>Thepathname.</returns>
privatestaticstringFindCommonPath(HttpContextcontext)
{
//Lookatthecurrentconfigurationforthepath
if(context!=null)
{
NameValueCollectiontable=(NameValueCollection)context.GetConfig(ConfigName);
if(table!=null)
{
stringpath=(string)table[CommonFilesKey];
if(path!=null)
{
returnCleanupPath(path);
}
}
}
//Returnthedefaultpathwithversionnumber
Assemblyassembly=typeof(BaseRichControl).Assembly;
Versionversion=assembly.GetName().Version;
returnDefaultCommonFilesRoot+version.Major.ToString()+"_"+version.Minor.ToString()+"/";
}
,本来开始的想法是改这个函数,后来发现其实它还有个可配置的路径接口,还是先配置吧!
于是在web.config加入以下节
<configSections>
<sectionname="MicrosoftWebControls"type="System.Configuration.NameValueSectionHandler,System,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</configSections>
<MicrosoftWebControls>
<addkey="CommonFiles"value="/web/treepath/"></add>
</MicrosoftWebControls>
<sectionname="MicrosoftWebControls"type="System.Configuration.NameValueSectionHandler,System,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</configSections>
<MicrosoftWebControls>
<addkey="CommonFiles"value="/web/treepath/"></add>
</MicrosoftWebControls>
注意:configSections一定要放在第一个子节最前面.
剪切默认网站的webctrl_client目录到虚拟目录web/treepath/下,运行程序,树型界面出现了,只是前面的加减号出现问题,再右键查看WEB代码,发现SystemImagesPath属性还是指到webctrl_client目录下,看了SystemImagesPath的代码,把treeview控件的SystemImagesPath设置为空,再次运行程序,OK!全部通过,treeview的图片目录再也不需要依赖默认网站的图片目录了,打包也变的方便了,如果是几个网站在一个机器上,你也可以设置自己独立的treeview图片风格了,嘿嘿,再此写下这些供大家参考
posted on 2005-06-01 00:43 ttyp 阅读(4263) 评论(33) 编辑收藏 引用 收藏至365Key 所属分类: ASP.NET
本文地址:http://www.45fan.com/dnjc/73824.html
评论
<configSections>
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
谢谢!回复
Thank You回复
没做过,为什么要private?
to napoler:
你报什么错啊,注意要把那两段放第一节的最前面回复
放到gac里面增加部署的工作量啊,private 只需要copy就可以了。回复
回复
不正是private么,我都要糊涂了
这里有篇文章
http://www.aspcool.com/lanmu/browse1.asp?ID=1183&bbsuser=aspnet回复
是我搞错了。sorry.
错误原因是,我把网页上的代码之间拷贝到我的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>回复
<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>
还是很有用的,简化了打包文件的制作 ;谢谢咯回复
你好,我已按照你的方法做了,但还是不行,不仅没图片也没平常的效果了,
这是什么原因呢。。会不会是因ieWebControl的版本不同而设置也不同呢?
我用的是 已打包好的直接安装的MSI程序。。请指教。。回复
路径设置对了么,注意前后都有反斜杠回复
而我的是1.0.2.226
microsoft.com下的也是1.0.2.226的
有些迷茫,高手再指点!回复
的VALUE值是相对虚拟目录而言的,而SystemImagesPath的正确指向应该是到webctrl_client/1_0/treeimages
比如我照上面的设置 那么
>? tv.SystemImagesPath
"/webctrl_client/1_0/treeimages/"
就证明引用正确了回复
<add key="CommonFiles" value="/虚拟目录名/webctrl_client/1_0/"></add>回复
如果把虚拟目录名加到里面其不是理不爽了吗?
安装部署时的虚拟目录名是可先的,这其不是又给安装部署时添加麻烦吗?
我还是保存原有的安装部署(把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]。
回复
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)
{
}
}
回复