2009-12-03 3 views
1

내 asp.net 응용 프로그램에서 ImageButton을 CSSImageButton이라는 ImageButton을 확장하는 WebControl으로 업데이트하고 있습니다. 렌더링 메소드를 오버라이드하여 CSS 스프라이트와 함께 작동하도록 만들었습니다. 나는 OnClick이 작동하고 OnClientClick을 얻을 수있었습니다. 그러나 일부 버튼에는 OnCommand가 있으며 무엇을해야 할지를 알 수 없습니다. 또한asp.net ImageButton을 CSHT 스프레드로 확장

public class CSSImageButton : ImageButton 
{ 
    public string DivClass { get; set; } 


    public CSSImageButton() 
    { 
     CssClass = ""; 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     base.Render(writer); 
    } 

    public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.Write("<div class=\"" + CssClass + " " + DivClass + "\">"); 
    } 


    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     writer.Write("<a id=\"" + this.ClientID + "\" title=\""+ this.ToolTip+"\""); 
     if (!String.IsNullOrEmpty(OnClientClick)) 
     { 
      writer.Write(" href=\"javascript:void(0);\" OnClick = \"" + OnClientClick + "\""); 
     } 
     else 
     { 
      writer.Write(" href=\"javascript:" + this.Page.GetPostBackEventReference(this, "ButtonClick") + "\""); 
     } 
     writer.Write("\"></a>"); 
    } 

    public override void RenderEndTag(HtmlTextWriter writer) 
    { 
     writer.Write("</div>"); 
    } 

} 

답변

2

, 당신이하는 LinkButton로하여 ImageButton을 교체하고 CSS-스프라이트 당신의 ImageButton의 재산 ImageUrl에서

The Source

0

에 대한 적절한 클래스와 그것의 내부 사업부를 가질 수 있습니다, 당신은 배치 할 수 있습니다 투명 이미지 (1x1 픽셀 크기를 갖는 링크, 예 : spacer.png)에 대한 링크입니다. 그런 다음 CSS에서 너비와 높이를 가진 배경 이미지를 배치합니다.

따라서 ImageButton을 사용하는 모든 위치에서 (브라우저 캐시에 남아있는) 동일한 투명 이미지를 호출합니다.

0

@roman m :이 접근법의 문제점 (상황에 따라 다름)은 HTML 유효성 검사를 통과하지 못하는 앵커 ("막대") 안에 div가 중첩되도록하는 것입니다.

허락한다면, 에티엔 느의 해결책은 마크 업/검증 관점에서 볼 때 더 자연스럽지 만 문제를 해결할 수 있다고 제안하면 문제가 해결됩니다.

그냥 내 $ .02

관련 문제