简体   繁体   English

在自定义ASP.Net AJAX Extender中嵌入图像

[英]Embedding images in Custom ASP.Net AJAX Extender

I have created a custom extender using ASP.Net AJAX Control Toolkit. 我已经使用ASP.Net AJAX Control Toolkit创建了一个自定义扩展器。 Below is the snippet from my extender class. 以下是我的扩展程序类的片段。

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;

[assembly: WebResource("CustomExtenders.ListComplete.ListCompleteBehavior.js", "text/javascript")]
[assembly: WebResource("CustomExtenders.ListComplete.style.css", "text/css")]
[assembly: WebResource("CustomExtenders.ListComplete.close.gif", "image/gif")]

namespace CustomExtenders.ListComplete
{
    [Designer(typeof(ListCompleteDesigner))]
    [ClientScriptResource("CustomExtenders.ListCompleteBehavior", "CustomExtenders.ListComplete.ListCompleteBehavior.js")]
    [ClientCssResource("CustomExtenders.ListComplete.style.css", LoadOrder = 1)]
    [TargetControlType(typeof(ListBox))]
    public class ListCompleteExtender : ExtenderControlBase
    {

The js and css files above are loaded perfectly with the assembly but it does not copy the gif image in the application directory. 上面的js和css文件可以完美地与程序集一起加载,但是不会在应用程序目录中复制gif图像。 The css in style.css reference close.gif but it does not find it there. style.css的css引用close.gif但在那里找不到。

I have set the Build Action property to Embedded Resource and it does not help. 我已将“ Build Action属性设置为Build Action Embedded Resource ,但它没有帮助。

Does anyone know how can I embed this resource. 有谁知道我如何嵌入此资源。

Well, I fixed it myself with a little bit of work-around (or hack). 好吧,我自己做了一些解决(或修改)的问题。

I have overriden the OnInit event in the above ListCompleteExtender class like this, 我已经在上面的ListCompleteExtender类中重写了OnInit事件,

 protected override void OnInit(System.EventArgs e)
    {
        base.OnInit(e);

        string closeImageUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "CustomExtenders.ListComplete.close.gif");

        //LiteralControl include = new LiteralControl(closeImageUrl);

        Label lblCloseImageUrl = new Label();
        lblCloseImageUrl.ID = "lblCloseImageUrlListCompleteExtender";
        lblCloseImageUrl.ViewStateMode = ViewStateMode.Disabled;
        lblCloseImageUrl.EnableViewState = false;
        lblCloseImageUrl.Text = closeImageUrl;
        lblCloseImageUrl.Attributes["style"] = "display: none;";

        this.Page.Header.Controls.Add(lblCloseImageUrl);
    }

As you could see in the earlier code, I was able to load the image close.gif in the assembly but could not find a way to reference it. 如您在较早的代码中所见,我能够在程序集中加载close.gif ,但是找不到引用它的方法。

I have retrieved the URL of the above image and wrote it in a Label control with ID lblCloseImageUrlListCompleteExtender . 我已经检索了上面图像的URL,并将其写在ID为lblCloseImageUrlListCompleteExtender的Label控件中。 I have placed the label in the page header, hide it and disbaled ViewState to make it as light as possible. 我将标签放置在页面标题中,将其隐藏并去除ViewState使其尽可能浅。

Now modify the extender javascript and add these lines after the control rendering javascript: 现在,修改扩展程序javascript,并在控件呈现javascript之后添加以下行:

        var imgCloseUrl = $("#lblCloseImageUrlListCompleteExtender").text()
        var closebuttonStyle = getCSSRule('ul.holder li.bit-box a.closebutton');
        closebuttonStyle.style.background = 'url("' + imgCloseUrl + '") repeat scroll 0 0 transparent';

The getCSSRule function used above is taken from here . 上面使用的getCSSRule函数来自此处

What we have just done here is that, modify the CSS used to display the close.gif to point the the URL of image extracted from assembly. 我们在这里所做的是,修改用于显示close.gif的CSS,以指向从程序close.gif提取的图像的URL。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM