使用C#和ASP.net在基于URL的控件中提取动态图像
时间:2020-03-06 14:33:30 来源:igfitidea点击:
我知道这是一个愚蠢的问题。由于某种原因,我对此一无所知。有任何想法吗?
对不起,应该更清楚了。
使用" HtmlGenericControl"提取链接描述和图像。
private void InternalCreateChildControls() { if (this.DataItem != null && this.Relationships.Count > 0) { HtmlGenericControl fieldset = new HtmlGenericControl("fieldset"); this.Controls.Add(fieldset); HtmlGenericControl legend = new HtmlGenericControl("legend"); legend.InnerText = this.Caption; fieldset.Controls.Add(legend); HtmlGenericControl listControl = new HtmlGenericControl("ul"); fieldset.Controls.Add(listControl); for (int i = 0; i < this.Relationships.Count; i++) { CatalogRelationshipsDataSet.CatalogRelationship relationship = this.Relationships[i]; HtmlGenericControl listItem = new HtmlGenericControl("li"); listControl.Controls.Add(listItem); RelatedItemsContainer container = new RelatedItemsContainer(relationship); listItem.Controls.Add(container); Image Image = new Image(); Image.ImageUrl = relationship.DisplayName; LinkButton link = new LinkButton(); link.Text = relationship.DisplayName; ///ToDO Add Image or Image and description link.CommandName = "Redirect"; container.Controls.Add(link); } } }
不要求任何人为我做这只是一个参考或者想法。
谢谢-太沮丧了,感觉很谦虚。
解决方案
这是一个可怕的问题。我的意思是,.NET具有图像控件,我们可以在其中将源设置为所需的任何内容。我不确定我们想讨论什么。
查看ASP.NET团队在CodePlex中发布的新DynamicImage控件。
我假设我们想基于URL动态生成图像。
我通常要做的是创建一个非常轻量级的HTTPHandler来提供图像:
using System; using System.Web; namespace Example { public class GetImage : IHttpHandler { public void ProcessRequest(HttpContext context) { if (context.Request.QueryString("id") != null) { // Code that uses System.Drawing to construct the image // ... context.Response.ContentType = "image/pjpeg"; context.Response.BinaryWrite(Image); context.Response.End(); } } public bool IsReusable { get { return false; } } } }
我们可以在img标签中直接引用它:
<img src="GetImage.ashx?id=111"/>
或者,我们甚至可以创建一个为我们执行此操作的服务器控件:
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Example.WebControl { [ToolboxData("<{0}:DynamicImageCreator runat=server></{0}:DynamicImageCreator>")] public class DynamicImageCreator : Control { public int Id { get { if (ViewState["Id" + this.ID] == null) return 0; else return ViewState["Id"]; } set { ViewState["Id" + this.ID] = value; } } protected override void RenderContents(HtmlTextWriter output) { output.Write("<img src='getImage.ashx?id=" + this.Id + "'/>"); base.RenderContents(output); } } }
这可以像
<cc:DDynamicImageCreator id="db1" Id="123" runat="server/>