自定义控件 图像不显示

本文关键字:显示 图像 自定义控件 | 更新日期: 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 方法中被覆盖