我有自定义控件。它有一个图像。我通过创建一个名为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方法覆盖
答案 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 结尾)。
当您访问此页面时,您应该获得您的图片..
答案 1 :(得分:0)
问题解决了。我误解了控件的生命周期,图像被createChildControls方法覆盖