2016-09-02 6 views
-1

태그 사이에 텍스트와 html을 사용하기 위해 만든 사용자 지정 단추에 문제가 있습니다. OnClientClick 이벤트를 제외하고 모든 것이 제대로 작동합니다.asp.net 사용자 지정 단추 OnClientClick이 작동하지 않습니다.

다음은 자체 프로젝트의 Button 클래스입니다.

[ParseChildren(false)] 
[PersistChildren(true)] 
public class BButton : Button 
{ 
    protected override string TagName 
    { 
     get { return "button"; } 
    } 
    protected override HtmlTextWriterTag TagKey 
    { 
     get { return HtmlTextWriterTag.Button; } 
    } 
    public new string Text 
    { 
     get { return ViewState["NewText"] as string; } 
     set { ViewState["NewText"] = HttpUtility.HtmlDecode(value); } 
    } 
    protected override void OnPreRender(System.EventArgs e) 
    { 
     base.OnPreRender(e); 

     LiteralControl lc = new LiteralControl(this.Text); 
     Controls.Add(lc); 
     base.Text = UniqueID; 
    } 
    [Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    [DisplayName("GlyphIcon")] 
    public string GlyphIcon 
    { 
     get { return this.ViewState["GlyphIcon"] as string; } 
     set { this.ViewState["GlyphIcon"] = HttpUtility.HtmlDecode(value); } 
    } 
    [Browsable(true)] 
    [EditorBrowsable(EditorBrowsableState.Always)] 
    [DisplayName("FontAwsome")] 
    public string FontAwsome 
    { 
     get { return this.ViewState["FontAwsome"] as string; } 
     set { this.ViewState["FontAwsome"] = HttpUtility.HtmlDecode(value); } 
    } 
    protected override void RenderContents(HtmlTextWriter writer) 
    { 
     if (!string.IsNullOrEmpty(this.GlyphIcon)) 
     { 
      writer.AddAttribute(HtmlTextWriterAttribute.Class, "glyphicon " + this.GlyphIcon); 
      writer.AddStyleAttribute(HtmlTextWriterStyle.MarginRight, "5px"); 
      writer.RenderBeginTag(HtmlTextWriterTag.Span); 
      writer.RenderEndTag(); // </span> 
     } 
     if (!string.IsNullOrEmpty(this.FontAwsome)) 
     { 
      writer.AddAttribute(HtmlTextWriterAttribute.Class, "fa fa " + this.FontAwsome); 
      writer.AddStyleAttribute(HtmlTextWriterStyle.MarginRight, "5px"); 
      writer.RenderBeginTag(HtmlTextWriterTag.Span); 
      writer.RenderEndTag(); // </span> 
     } 
     RenderChildren(writer); 
    } 
} 

그리고 이것은 작동하는 asp 페이지 호출입니다.

<CPCC:BButton ID="btnDelete" CssClass="btn btn-danger" runat="server" CausesValidation="False" OnClick="btnDelete_Click" OnClientClick="return confirm('Are you sure you want to Delete this item?');"><i class="fa fa-trash-o">&nbsp;</i>&nbsp;<asp:Localize runat="server" meta:resourcekey="btnDeleteText" /> 
</CPCC:StyleButton> 

이 호출은 작동하지 않습니다

<CPCC:BButton id="btnAdd" CssClass="btn btn-success" runat="server" OnClick="btnAdd_Click" ValidationGroup="Create" OnClientClick="ShowProgressDialog('Creating Account...');"> <i class="fa fa-plus">&nbsp;</i>&nbsp;<asp:Localize runat="server" meta:resourcekey="btnCreateText"/> </CPCC:StyleButton> 

모든 유효성 검사가 필요한 버튼 OnClientClick="return confirm('Creating Account...');"를 제외하고 작동하고,이 ASP를 제대로 작동합니다 버튼을 누릅니다. 내가 여기서 뭔가를 놓치고 있니?

+0

을 시도 할 수있는 경우, 클릭에 응답 (문자 그대로) 자식 컨트롤을 필요로 - http://stackoverflow.com/questions/16293456// onclientclick-does-not-works-on-asp-net-linkbutton – MethodMan

답변

0

BButton에서 ASP : Button 컨트롤의 RenderContents 메서드를 재정 의하여 기본 메서드 (일반적으로 자바 스크립트를 렌더링 함)가 건너 뛰게됩니다.

RenderContents 메서드에 OnClientClick 속성을 읽고 적절한 태그를 출력하는 코드를 추가해야합니다.

매우 영리한 사람이라면 base.RenderContents()으로 전화하여 방법을 찾을 수 있습니다.

가 아니면 그냥 자바 스크립트를 사용하여 시도 할 수 있습니다 당신이

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

    LiteralControl lc = new LiteralControl(this.Text); 
    lc.Attributes.Add("onclick",this.OnClientClick); 
    Controls.Add(lc); 
    base.Text = UniqueID; 
} 
+0

이 더 추적하면 CausesValidation = "False"인 취소 단추에서 작동하지만 유효성 검사가 필요할 때 작동하지 않는다는 것을 알았습니다. 변경 사항을 반영하기 위해 내 게시물을 편집 중입니다. –

관련 문제