自定义控件 图像不显示
本文关键字:显示 图像 自定义控件 | 更新日期: 2023-09-27 18:30:34
我有一个自定义控件。它有一个图像。我通过创建一个名为 ButtonIconImgSrc 的新属性,在自定义控件代码中公开了 ImageURL 属性,如下所示:
[Category("Appearance")]
[Description("Gets or sets the logo image path")]
public String ButtonIconImgSrc
{
get
{
EnsureChildControls();
return iconImg.ImageUrl;
}
set
{
if (value != null)
{
iconImg.ImageUrl = value.ToString();
}
}
}
我编译 customeControl 代码以创建一个 dll,然后将该 dll 添加到我的网站解决方案中,以便我可以将其拖放到我的设计器视图上或动态创建它。在设计器中一切似乎都很好,我放下它,设置我的自定义属性并且看起来不错。
.....但是当我在浏览器中编译和运行站点时,IMG 没有显示。没有任何设置正确,当它回到调用代码时,它全部丢失了 - 标签和文本框以及宽度和高度等。我想动态创建这个自定义控件,而不是使用设计器,而是同样的问题。
下面是调用上述"set"方法的代码,除非它从 eset 方法返回后它仍然是空白的。
protected void Page_Load(object sender, EventArgs e)
{
myCustomButton tb = new myCustomButton();
tb.ButtonIconImgSrc = "~/imgs/target_logo.png";
pnlButtons.Controls.Add(tb);
}
我看到上面的代码被点击,并且在 myCustomButton 代码中设置了字符串"~/imgs/ibc_foh.png",并且代码退出,一切看起来都不错。当调试器返回到调用类(我的网站Page_Load)时,属性 tb。ButtonIconImgSrc 仍然是空白的,"。所以图像不会出现。
更新:问题已解决。我误解了控件的生命周期,图像在 createChildControls 方法中被覆盖
创建/添加通用 HttpHandler 页面到项目中。
在函数"ProcessRequest"中,将有一个HttpContext对象(称为context)。执行以下操作:
public class YouHandlerPage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// REVIEW AND PROCESS THE REQUEST (i.e. ...
// context.Request.QueryString
// context.Request.RequestContext.RouteData.Values;
// context.Request.Form
string fDirectory = @"C:'Users'john'Desktop'";
string fileName = "ibc";
string fileExt = "png";
context.Response.StatusCode = 200;
context.Response.ContentType = "Image/" + fileExt;
//let context.Response.ContentLength be specified by the following WriteFile method
context.Response.WriteFile(Format.String("{0}{1}.{2}", fDirectory, fileName, fileExt));
}
public bool IsReusable { get { return false;} }
}
现在,运行您的 Web 应用程序.. 并转到localhost:<portassigned>/<handlerpagefilename>.ashx
其中locahost:<portassigned>
是你的域(或 IIS Express 分配的),<handlerpagefilename>
是你添加的任何名称 GenericHandlerPage(应以 .ashx 结尾)。
当您访问此页面时,您应该获得图像。
进一步审查
- 查看注册路由以映射到您的处理程序页面。
- 查看 HttpModules 作为 httphandler 页面的替代方案
问题解决了。我误解了控件的生命周期,图像在 createChildControls 方法中被覆盖