2012-08-03 71 views
0

我已經創建了一個html5畫布和javascript簽名板,我希望作爲具有更新面板的Web用戶控件來處理按鈕點擊。出於某種原因,如果我將更新面板和簽名板控件直接添加到aspx文件中,則自動回發事件可以正常工作,但是當我將相同的代碼放入Web用戶控件時,會出現字段(畫布,按鈕,div等)回發不再有效。在這兩種情況下,我都將我的腳本管理器放在更新面板上方。ASP.NET更新面板不能在Web用戶控件內工作

這裏是我的ascx代碼:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Signature_Pad.ascx.cs"  Inherits="Controls_Signature_Pad" %> 

<asp:UpdatePanel runat="server" ID="signatureUpdate" updatemode="Conditional"> 
    <Triggers> 
    <asp:AsyncPostBackTrigger controlid="signatureApprove" eventname="Click" /> 
    <asp:AsyncPostBackTrigger controlid="sigClear" eventname="Click" /> 
    <asp:AsyncPostBackTrigger controlid="sigCancel" eventname="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <fieldset id="SignatureFieldSet" runat="server" style=" border: 1 solid black;"> 
     <p><asp:Label ID="signatureTextLabel" AutoPostBack="true" runat="server" Text=""></asp:Label></p> 
     <div id="canvasDiv" style="height: 300px; border:0px solid #000000; "> 
      <canvas id="canvasSignature" style="border:1px solid #000000;"></canvas> 
     </div> 
     <div id="sigButtonDiv" style=" border:0px solid #000000;"> 
      <br /><br /> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="OnApprove" ID="signatureApprove" Text="Approve" /> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="OnClear" ID="sigClear" Text="Clear" /> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="OnCancel" ID="sigCancel" Text="Cancel" /> 
     </div> 
    </fieldset> 
</ContentTemplate> 
</asp:UpdatePanel> 

這裏是揹着我的ascx代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Controls_Signature_Pad : System.Web.UI.UserControl 
{ 
private string signatureData; 
private string signatureText; 

public string SignatureData 
{ 
    get { return signatureData; } 
    set { signatureData = value; } 
} 
public string SignatureText 
{ 
    get { return signatureText; } 
    set { signatureText = value; } 
} 

public void OnApprove(object sender, EventArgs e) 
{ 
    UtilityClass.showMessageBox("Approve Clicked", this); 
    SignatureText = "Approved Clicked"; 
} 
public void OnClear(object sender, EventArgs e) 
{ 
    UtilityClass.showMessageBox("Clear Clicked", this); 
    SignatureText = "Clear Clicked"; 
} 
public void OnCancel(object sender, EventArgs e) 
{ 
    UtilityClass.showMessageBox("Cancel Clicked", this); 
    SignatureText = "Cancel Clicked"; 
} 

public void Page_Load(object sender, EventArgs e) 
{ 
    signatureTextLabel.Text = signatureText; 
} 
} 

這裏是我的相關的aspx:

... 
<%@ Register TagPrefix="mjt" TagName="SignaturePad" Src="~/Controls/Signature_Pad.ascx" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="true"></asp:ScriptManager> 
<mjt:SignaturePad ID="SignaturePad" runat="server" Visible="true" SignatureData="" SignatureText="Test Signature Test." /> 

... 
+0

試試吧:不要將更新面板和腳本管理器添加到您的Web使用控件中。將這兩個添加到您的頁面,並將控件添加到頁面中的更新面板中,並檢查它是否有效。在你的文章中還提到使用母版頁或簡單頁面?也是您的網頁上還存在的腳本管理器。 – 2012-08-03 20:00:19

+0

我發現了這個問題。它與控件中的更新面板一起工作,我對事件的工作原理有一個基本的誤解。我沒有在控件中定義事件,我只是期望內置的onClick事件爲我完成所有的工作。謝謝你的想法。 – 2012-08-06 15:03:52

+0

好,歡迎您。發佈您的答案,以便對其他用戶有所幫助。 – 2012-08-06 16:05:26

回答

1

在代碼中添加事件處理後面固定的問題。這是我的代碼:

該控件有三個觸發事件所需的按鈕(批准,清除和取消)。

在ascx.cs:

public event EventHandler Approved; 
public event EventHandler Cleared; 
public event EventHandler Canceled; 

protected void signatureApprove_clicked(object sender, EventArgs e) 
{ 

    if(Approved != null) 
    Approved(this, EventArgs.Empty); 

} 
protected void sigClear_clicked(object sender, EventArgs e) 
{ 
     if (Cleared != null) 
     Cleared(this, EventArgs.Empty); 
} 
protected void sigCancel_clicked(object sender, EventArgs e) 
{ 
     if (Canceled != null) 
     Canceled(this, EventArgs.Empty); 
} 

在ASCX:

<asp:UpdatePanel runat="server" ID="signatureUpdate" updatemode="Conditional"> 
    <Triggers> 
    <asp:AsyncPostBackTrigger controlid="signatureApprove" eventname="Click" /> 
    <asp:AsyncPostBackTrigger controlid="sigClear" eventname="Click" /> 
    <asp:AsyncPostBackTrigger controlid="sigCancel" eventname="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <fieldset id="SignatureFieldSet" class="fieldSetStyle" > 
     <p><asp:Label ID="signatureTextLabel" AutoPostBack="true" runat="server" Text=""></asp:Label></p> 
     <div id="canvasDiv" runat="server" > 
      <canvas id="canvasSignature" class="canvasStyle"></canvas> 
     </div> 
     <div id="sigButtonDiv"> 
     <br /> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="signatureApprove_clicked" ID="signatureApprove" Text="Approve" CssClass="buttonStyle" /> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="sigClear_clicked" ID="sigClear" Text="Clear" CssClass="buttonStyle"/> 
      <asp:Button AutoPostBack="true" runat="server" OnClick="sigCancel_clicked" ID="sigCancel" Text="Cancel" CssClass="buttonStyle"/> 
     </div> 
     </fieldset> 
    </ContentTemplate> 
</asp:UpdatePanel> 

在ASPX:

<mjt:SignaturePad OnApproved="Signature_Approved" OnCanceled="Signature_Canceled" OnCleared="Signature_Cleared" ID="SignaturePad" runat="server" /> 

在aspx.cs:

protected void Signature_Approved(object sender, EventArgs e) 
{ 
    //Do signature approved action 
} 
protected void Signature_Canceled(object sender, EventArgs e) 
{ 
    //Do signature cancel action 
} 
protected void Signature_Cleared(object sender, EventArgs e) 
{ 
    //Do signature cleared action 
} 
相關問題