日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不同项目之间的控件共享

發布時間:2025/6/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不同项目之间的控件共享 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不同項目之間的控件共享?

????? 上篇blog我有提到,不知如何解決不用項目之間的控件共享問題.很多朋友給予了熱心的回答,這里一起表示感謝.
???????
總結大家的回復,一般有2種觀點,一是做成用戶控件,二是js+css的形式.確實現在這2種方法很多見,各有優點,但也各有缺點.做成用戶控件的話,如果每次修改都要發布dll的話,無疑是非常麻煩的,js+css也是一種非常好的方法,應該很多網站目前都是使用這個方法來共享頭部和底部的.js的方法很便捷,但是也缺少一定的靈活性.因為我們不僅僅是共享頭尾而已.

????? 比如文章的列表,不同板塊的文章會呈現不用的文章和表現形式.他們只是調用的內容和排版上有所不同,而代碼方面應該是一致的.這個時候就需要做成用戶控件了.那么該如何解決這個問題呢?

????? 我們先設想一下大概思路,不同項目之間共享控件,那么控件就應該做成一個獨立的項目,而同一個控件的代碼是一樣的(就是ascx.cs是一樣的),變現不一樣(就是ascx不一樣).

肯定有朋友會想到了,我們建立多個ascx文件,讓他們都繼承自同一個ascx.cs不久可以了嗎?

?

???????

,沒錯,確實是這樣的思路,但是問題在于,.NET的控件只能被同一個項目所引用,因為他只支持虛擬的相對路徑.一旦跨項目引用了就出提示錯誤.(超出了當先項目虛擬目錄的根目錄了)

???????? 經過我們Google+baidu,發現.net 2.0提供了一些類來實現自己的虛擬文件系統. 這些類在System.Web.Hosting命名空間內定義.我們只要重寫VirtualPathProvider、VirtualFile就可以把ascx放在一個統一的地方,然后各個項目都可以調用了.

?????? 具體代碼如下:

??????????

Code
??1public?class?SkinVirtualPathProvider?:?VirtualPathProvider
??2
??3????{
??4
??5????????/**////?<summary>
??6
??7????????///?定義模板路徑
??8
??9????????///?</summary>

?10
?11????????public?string?VirtualPath
?12
?13????????{
?14
?15????????????get;
?16
?17????????????set;
?18
?19????????}

?20
?21?
?22
?23????????/**////?<summary>
?24
?25????????///?定義擴展名
?26
?27????????///?</summary>

?28
?29????????public?string?ExtensionString
?30
?31????????{
?32
?33????????????get;
?34
?35????????????set;
?36
?37????????}

?38
?39?
?40
?41????????private?bool?CheckPathInExtension(string?virtualPath)
?42
?43????????{
?44
?45????????????return?virtualPath.EndsWith(ExtensionString);
?46
?47????????}

?48
?49?
?50
?51????????public?override?bool?FileExists(string?virtualPath)
?52
?53????????{
?54
?55????????????return?(CheckPathInExtension(virtualPath)?||?Previous.FileExists(virtualPath));
?56
?57????????}

?58
?59?
?60
?61????????public?override?VirtualFile?GetFile(string?virtualPath)
?62
?63????????{
?64
?65????????????if?(!CheckPathInExtension(virtualPath))
?66
?67????????????????return?base.GetFile(virtualPath);
?68
?69????????????else
?70
?71????????????{
?72
?73????????????????return?new?SkinVirtualFile(this,virtualPath);
?74
?75????????????}

?76
?77????????}

?78
?79?
?80
?81????????public?override?CacheDependency?GetCacheDependency(string?virtualPath,?IEnumerable?virtualPathDependencies,?DateTime?utcStart)
?82
?83????????{
?84
?85????????????if?(CheckPathInExtension(virtualPath))
?86
?87????????????????return?new?CacheDependency(this.VirtualPath?+?"/"?+?virtualPath);
?88
?89?
?90
?91????????????else
?92
?93????????????????return?base.GetCacheDependency(virtualPath,?virtualPathDependencies,?utcStart);
?94
?95????????????
?96
?97????????}

?98
?99????}

100
101?
102
103?
104
105public?class?SkinVirtualFile:VirtualFile
106
107????{
108
109????????string?path;
110
111????????private?SkinVirtualPathProvider?provider;
112
113?
114
115????????public?SkinVirtualFile(SkinVirtualPathProvider?provider,?string?virtualPath)
116
117????????????:?base(virtualPath)
118
119????????{
120
121????????????path?=?provider.VirtualPath?+?"/"?+?virtualPath;
122
123????????????this.provider?=?provider;
124
125????????}

126
127?
128
129????????public?override?Stream?Open()
130
131????????{
132
133????????????return?new?FileStream(this.path,?FileMode.Open,?FileAccess.Read,?FileShare.Read);
134
135????????}

136
137}

138
139?
140

然后在Global里注冊一下:

Code
??1public?class?SkinVirtualPathProvider?:?VirtualPathProvider
??2
??3????{
??4
??5????????/**////?<summary>
??6
??7????????///?定義模板路徑
??8
??9????????///?</summary>
?10
?11????????public?string?VirtualPath
?12
?13????????{
?14
?15????????????get;
?16
?17????????????set;
?18
?19????????}
?20
?21?
?22
?23????????/**////?<summary>
?24
?25????????///?定義擴展名
?26
?27????????///?</summary>
?28
?29????????public?string?ExtensionString
?30
?31????????{
?32
?33????????????get;
?34
?35????????????set;
?36
?37????????}
?38
?39?
?40
?41????????private?bool?CheckPathInExtension(string?virtualPath)
?42
?43????????{
?44
?45????????????return?virtualPath.EndsWith(ExtensionString);
?46
?47????????}
?48
?49?
?50
?51????????public?override?bool?FileExists(string?virtualPath)
?52
?53????????{
?54
?55????????????return?(CheckPathInExtension(virtualPath)?||?Previous.FileExists(virtualPath));
?56
?57????????}
?58
?59?
?60
?61????????public?override?VirtualFile?GetFile(string?virtualPath)
?62
?63????????{
?64
?65????????????if?(!CheckPathInExtension(virtualPath))
?66
?67????????????????return?base.GetFile(virtualPath);
?68
?69????????????else
?70
?71????????????{
?72
?73????????????????return?new?SkinVirtualFile(this,virtualPath);
?74
?75????????????}
?76
?77????????}
?78
?79?
?80
?81????????public?override?CacheDependency?GetCacheDependency(string?virtualPath,?IEnumerable?virtualPathDependencies,?DateTime?utcStart)
?82
?83????????{
?84
?85????????????if?(CheckPathInExtension(virtualPath))
?86
?87????????????????return?new?CacheDependency(this.VirtualPath?+?"/"?+?virtualPath);
?88
?89?
?90
?91????????????else
?92
?93????????????????return?base.GetCacheDependency(virtualPath,?virtualPathDependencies,?utcStart);
?94
?95????????????
?96
?97????????}
?98
?99????}
100
101?
102
103?
104
105public?class?SkinVirtualFile:VirtualFile
106
107????{
108
109????????string?path;
110
111????????private?SkinVirtualPathProvider?provider;
112
113?
114
115????????public?SkinVirtualFile(SkinVirtualPathProvider?provider,?string?virtualPath)
116
117????????????:?base(virtualPath)
118
119????????{
120
121????????????path?=?provider.VirtualPath?+?"/"?+?virtualPath;
122
123????????????this.provider?=?provider;
124
125????????}
126
127?
128
129????????public?override?Stream?Open()
130
131????????{
132
133????????????return?new?FileStream(this.path,?FileMode.Open,?FileAccess.Read,?FileShare.Read);
134
135????????}
136
137}
138
139?
140

這里擴展名我定義的.skin,這里我們也web.config里也要注冊一下

<buildProviders>

??????? <add extension=".skin" type="System.Web.Compilation.UserControlBuildProvider"/>

????? </buildProviders>

?

如此這般操作了以后,比如項目中要使用1.skin 就會去 skin目錄下去找這個文件了,不再受到虛擬目錄的根目錄的限制了.

解決這個問題之后,我們就要修改我們的用戶控件了,讓他會load這個skin里面的內容,然后來做數據的綁定.

具體代碼我就不貼了,提供幾個參考鏈接.

參考鏈接:

1.?? http://www.cnblogs.com/cricket/articles/25299.html

2.?????? http://www.cnblogs.com/zxjay/archive/2008/11/13/xianfen_net_virtualpathprovider.html

3.?????? http://blog.csdn.net/baoaya/archive/2009/07/27/4384178.aspx

?

?

??????沒啥技術含量,主要是想分享一下解決問題的方法和思路,大家見笑了

轉載于:https://www.cnblogs.com/xinzhyu/archive/2009/09/01/1558134.html

總結

以上是生活随笔為你收集整理的不同项目之间的控件共享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品20p | 欧美a级肉欲大片xxx | 夜夜爽影院 | 欧美熟妇激情一区二区三区 | 可以看av的网址 | 亚洲搞av | 欧美黄在线| 亚洲奶汁xxxx哺乳期 | 亚洲 欧美 激情 小说 另类 | 99天堂网| 国产高清在线精品 | 免费爱爱视频 | 亚洲第二色 | 久久久精品久久久 | 污污视频在线免费看 | 亚洲国产成人av | 成人国产一区二区三区精品麻豆 | 黄色三级网络 | 91亚洲视频在线 | 国产精品又黄又爽又色无遮挡 | 免费看国产黄色片 | 久久丫精品久久丫 | 色综合欧美 | 中文字幕免费在线观看视频 | 久久久久无码国产精品不卡 | 精品一区二区三区免费视频 | 日本少妇18p | 一本色道久久综合亚洲精品酒店 | 国产精品自产拍高潮在线观看 | 成人av高清在线 | 久久人体| 亚洲激情网站 | 午夜羞羞网站 | 国产综合日韩 | 欧美日韩一区二区三区在线电影 | 探花视频在线观看 | 亚洲av网址在线 | 麻豆激情视频 | 欧美卡一卡二卡三 | 国产高清视频免费在线观看 | 波多野结衣一区二区三区高清 | 人妻精品一区二区三区 | 国产图片一区 | 红杏出墙记 | 韩日午夜在线资源一区二区 | 欧美一区二区三区影视 | 日本小视频网站 | 午夜一区 | 久久毛片视频 | 欧美日韩人妻精品一区在线 | 日韩精品一卡二卡 | 亚洲一区二区三区婷婷 | 五月婷婷网站 | www..com黄色| 国产精伦| 97超碰国产精品无码蜜芽 | av色图在线 | 国产亚州av | 538在线精品视频 | 国产av一区二区不卡 | 奇米网888| 日韩黄色一级 | 91香蕉国产在线观看 | 伊人网欧美 | 久久久亚洲一区二区三区 | 精品一区在线 | 婷婷色激情 | 美国av片 | 亚洲综合首页 | 欧美日韩成人网 | 亚洲午夜天堂 | 狗爬女子的视频 | 男人操女人网站 | 不卡一区二区三区四区 | 国产成人在线视频网站 | 精品国产免费无码久久久 | 欧美色精品在线 | 毛片3| 日韩乱码人妻无码系列中文字幕 | 国产曰肥老太婆无遮挡 | 免费a级黄色片 | av先锋在线| 中文字幕人妻丝袜乱一区三区 | 国产15页| 国产精品一区在线观看 | 日本二区视频 | 国产成人一区二区三区视频 | 久草毛片 | 日韩在线视 | 色啪视频 | 国产91精品一区二区 | 一区二区三区四区五区av | 欧美精品免费一区二区三区 | 日韩视频专区 | 久久网一区二区 | 18岁毛片 | 老妇裸体性激交老太视频 | 免费成人小视频 | 国产午夜av |