请问设计时能动态变更web.config中的handlers么

还想懒够 2009-11-23 01:37:28
我现在正在设计一个WebCustomerControl,由于里面需要使用到图片,并且这个图片是来源于byte[],由于没有找到直接的方法能够实现从System.Drawing.Image到System.Web.UI.WebContro.Image,因此不得不采用handlers,通过继承IHttpHandler来实现一个假想的页面。再通过<img src='页面地址'/>来解决。


现在问题在于,如何在设计时,当使用到这个控件,就能够自动更改Web.Config中的handlers,自动判断中间是否有一行注册,如果没有,就注册上。如果有,就不动了。


请各位注意是在设计时去变更,如果是运行时的变更,暂时不需要,谢谢!


...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuike519 2009-11-23
  • 打赏
  • 举报
回复
基本思路如下:
1、首先你的自定义控件应该有个Designer
2、在这个Designer里面重写方法GetDesignTimeHtml,这个方法是活的你在设计时要显示的HTML。
3、在这个方法里面活的当前的Web.Config文件,代码如下:


private HttpHandlerAction GetMyAction(HttpHandlersSection section,string handlerName) {
foreach (HttpHandlerAction action in section.Handlers) {
if (string.Compare(action.Type, handlerName, false) == 0) {
return action;
}
}
return null;
}

public override string GetDesignTimeHtml() {
string type = "WebApplication1.WebCustomControl1,WebApplication1";
IWebApplication webApp = (IWebApplication)GetService(typeof(IWebApplication));
if (webApp != null) {
Configuration config = webApp.OpenWebConfiguration(false);
ConfigurationSectionGroup systemWeb = config.GetSectionGroup("system.web");
HttpHandlersSection handlerSettings = (HttpHandlersSection)systemWeb.Sections["HttpHandler"];
if (GetMyAction(handlerSettings, type) == null) {
HttpHandlerAction handler = new HttpHandlerAction("*.xpax", type, "*");
handlerSettings.Handlers.Add(handler);
config.Save(ConfigurationSaveMode.Minimal);
}

}
return string.Empty;
}
zw_548498 2009-11-23
  • 打赏
  • 举报
回复
蹭点分先
还想懒够 2009-11-23
  • 打赏
  • 举报
回复
谢谢楼上两位,我也是刚刚找到一段代码,正在测试中

http://www.tkachenko.com/blog/archives/000686.html
wanghui0380 2009-11-23
  • 打赏
  • 举报
回复
可以的,只需要在自己的ControlDesigner设计器中加入设计期支持就成
例子:
 IWebApplication webApp = (IWebApplication)Component.Site.GetService(
typeof(IWebApplication));
var config = webApp.OpenWebConfiguration(false);

config.ConnectionStrings.ConnectionStrings.Add(new System.Configuration.ConnectionStringSettings("xx", "yy"));
config.Save();


这里我在设计期加入了对ConnectionString支持
还想懒够 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wszhoho 的回复:]
楼主的做法和水晶报表的一样吧,拖一个报表查看器到aspx页面,会在web.config里自动的加上handler。
[/Quote]


就是这个想法,请问如何实现,谢谢!
wszhoho 2009-11-23
  • 打赏
  • 举报
回复
楼主的做法和水晶报表的一样吧,拖一个报表查看器到aspx页面,会在web.config里自动的加上handler。
wuyq11 2009-11-23
  • 打赏
  • 举报
回复
可byte->base64->image
byte[] myByte;
string Base64Str;
Encoding myEncoding = Encoding.GetEncoding("utf-8");
myByte = myEncoding.GetBytes(factString);
Base64Str = Convert.ToBase64String(myByte);

public Image Base64StringToImage(string Base64String)
{
byte[] imageBytes = Convert.FromBase64String(Base64String);
MemoryStream stream = new MemoryStream(imageBytes);
return Image.FromStream(stream);
}
Page.LoadControl加载控件,同时修改web.config
watsonchia 2009-11-23
  • 打赏
  • 举报
回复
用httphandler输出图片,不需要注册吧,直接添加.ashx文件就可以
SK_Aqi 2009-11-23
  • 打赏
  • 举报
回复
zhubo_1117 2009-11-23
  • 打赏
  • 举报
回复
这个没有做过,友情帮顶。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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