2012-01-31 1 views
0

ASP.Net AJAX Control Toolkit을 사용하여 사용자 정의 익스텐더를 만들었습니다. 아래는 내 Extender 클래스의 스 니펫입니다.사용자 정의 ASP.Net AJAX Extender에 이미지 임베드

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 
    { 

위의 js 및 css 파일은 어셈블리와 함께 완벽하게로드되지만 응용 프로그램 디렉토리의 gif 이미지는 복사되지 않습니다. style.css 참조 close.gif에있는 CSS가 있지만 찾을 수 없습니다.

Build Action 속성을 Embedded Resource으로 설정했지만 도움이되지 않습니다.

누구든지이 리소스를 어떻게 포함시킬 수 있는지 알고 있습니까?

답변

0

음, 약간의 해결 방법 (또는 해킹)으로 해결했습니다.

이 같은 위의 ListCompleteExtender 클래스에서하는 OnInit 이벤트를 오버라이드 (override) 한

,

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

는 이전 코드에서 볼 수있는 것처럼, 나는 어셈블리에서 이미지 close.gif를로드 할 수 있었다하지만를 찾을 수 없습니다 그것을 참조하는 방법.

위 이미지의 URL을 검색하여 ID가 ​​lblCloseImageUrlListCompleteExtender 인 Label 컨트롤에 작성했습니다. 페이지 머리글에 레이블을 배치하고 숨기고 ViewState의 불일치를 가능한 한 가볍게 만듭니다.

지금 스크립트 체질 수정 및 렌더링 제어 스크립트 후 다음 행을 추가

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

위에서 사용 getCSSRule 기능 here로부터 취해진 다.

우리가 여기서 한 것은 어셈블리에서 추출한 이미지의 URL을 가리 키도록 close.gif을 표시하는 데 사용되는 CSS를 수정 한 것입니다.

관련 문제