惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - dragonpro

初创公司招聘 程序员 平面设计师 软件销售(成都) 分享一组红白机音乐Remix 初识北京 2008,再会,深圳 顾客想要的和说的不一样 从String到enum的互换(string to enum to string) CommunityServer系列之十一:优秀的URL重写机制 Community Server系列之十:让CS2支持中文搜索 Community Server系列之九:CS2中的用户管理1(MemberRole) Community Server系列之八:CS2中的CSContext Community Server系列之六:CS2中的关键词及数据结构 Community Server系列之五:CS2中的Ajax原理 Community Server系列之四:Ajax在CS2.0中的应用1 Community Server系列之三:页面间关系2[介绍] Community Server系列之二:页面之间的关系1[介绍] Community Server系列之一:开篇简介 梦里的灵感 使用Enterprise Library DAAB架构灵活的数据提供层 异构数据库转换工具的结构说明
Community Server系列之七:快速找到需要修改的文件[技巧]
dragonpro · 2006-05-07 · via 博客园 - dragonpro

       CS中的模板几乎遍布整个应用,当我们利用SDK做二次开发的时候,我们需要很长的熟悉过程,而这个过程大部分时间被烦躁的检索所占据,检索模板、检索类文件,检索类文件我们可以使用类视图快速定位到类所在的文件。然而确定需要修改的模板或需要修改的类却不是那么方便的事情。CS在这里为我们做了一些工作,但并不是特别方便,按照下面的方法即可直观的找到需要修改的文件。

       CS中,如果是调试项目,在生成的HTML代码里会嵌入页面所使用的模板的类名及模板文件路径,但它是以HTML注释的方式体现出来的,我们要确定某个模块的信息还需要查看源文件并繁琐的检索,这里我们只需要稍微改造一下便能让这些注释更直观一眼就可以快速了解模块的相关信息。

让我们打开\src\Controls\BaseClasses\TemplatedWebControl.cs\src\Controls\BaseClasses\SkinnedWebControl.cs这两个文件,这两个类是系统模板控件的基类,它们都有这样一个方法:

[System.Diagnostics.Conditional("DEBUG")]
        
protected void SourceMarker(bool isStart, HtmlTextWriter writer)
        {
           
            
if(isStart)
            {
                writer.WriteLine(
"<!-- Start: {0} -->"this.GetType());
                
                
if(System.IO.File.Exists(HttpContext.Current.Server.MapPath(this.SkinPath)))
                    writer.WriteLine(
"<!-- Skin Path: {0} -->"this.SkinPath);
                
else if(SkinTemplate != null)
                    writer.WriteLine(
"<!-- Inline Skin: {0} -->"true);
                
else
                    writer.WriteLine(
"<!-- Skin Path: {0} -->"this.DefaultSkinPath);

            }

else
                writer.WriteLine(
"<!-- End: {0} -->"this.GetType());
        }

这个方法的目的即是,在Debug编译环境下,控件输出的时候记录控件所属于的类名和控件所使用的skin路径,方便客户端通过HTML代码找到相应的代码进行修改,然而这里使用的是HTML注释,我们在查找的时候很不方便,那么我们把它转换成HTML隐藏的标签并在需要的时候让其制动显示在浏览器上不是更方便吗,这就进行改造,修改此方法如下:

SourceMarker

聪明的你一定看出来了,这里其实很简单,只是把相应的HTML注释改为隐藏的span标签,对应的两个类文件都按照这样的方式进行修改即可。
修改了上述两个文件后还需要修改另外一个每页都需要的文件,这里我们选择\src\Controls\Utility\Footer.cs这个文件,因为这个脚标文件在每个页面都用得着,我们可以在这里设置一个开关让其通过点击自动显示和隐藏上面所修改的标签。
在Footer这个类的Render方法里把相应的writer.Writer方法改为如下所示样式,这样在Debug的时候就可以点击页脚的Skin、InSkin、Class三个连接来显示相应的Debug标签了。

Footer

通过上面的改造我们可以在页脚看到三个标签:Skin、InSkin、Class当我们点击这三个标签的时候页面就会显示相应的控件的类名,Skin路径等信息,这在二次开发CS的过程中可以非常快速的定位到想修改的资源,节约大量的检索时间。希望对您有所帮助。