自定义控件图像未显示

时间:2014-11-14 18:06:19

标签: c# asp.net image custom-controls

我有自定义控件。它有一个图像。我通过创建一个名为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方法覆盖

2 个答案:

答案 0 :(得分:1)

创建/添加Generic HttpHandler页面到您的项目。

在函数' ProcessRequest'中。将有一个HttpContext对象(称为上下文)。 按照以下步骤操作:

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;} }
}

现在,运行您的网络应用程序..并转到localhost:<portassigned>/<handlerpagefilename>.ashx

locahost:<portassigned>是您的域(或分配了IIS Express),而<handlerpagefilename>是您的名字,您添加了GenericHandlerPage(应以 .ashx 结尾)。

当您访问此页面时,您应该获得您的图片..


进一步审查


  • 查看注册路线以映射到您的Handler页面。
  • 查看HttpModules作为httphandler页面的替代方案

答案 1 :(得分:0)

问题解决了。我误解了控件的生命周期,图像被createChildControls方法覆盖