2011-08-31 46 views
2

有一個UpdatePanel包含2個面板,默認按鈕設置爲偵聽輸入按鍵。該UpdatePanel是ModalPopupExtender的PopupControl。UpdatePanel,ModalPopupExtender,並輸入按鍵問題

在整個頁面回傳的模式彈出窗口中按Enter鍵時遇到問題。有任何想法嗎?這裏有一些代碼段(我已經去除了多餘的欄...):

<div runat="server" id="divShippingEstimatorPopup" class="shippingEstimatorModalPopup"> 
<asp:UpdatePanel ID="upPopup" runat="server"> 
    <ContentTemplate> 
     <asp:Panel runat="server" ID="pnlShippingEstimator" DefaultButton="lnkbtnGetEstimates"> 
      <div class="title content_title">Shipping Estimator</div> 
      <asp:Label runat="server" ID="lblMessage" /> 
      <table cellpadding="0" cellpadding="0" class="shipping"> 
       <!-- Removed to shorten code snippet --> 
       <tr> 
        <td colspan="2"> 
         <div class="buttonHolder">        
          <Monarch:LinkButtonDefault runat="server" ID="lnkbtnGetEstimates" CssClass="button_action button_margin_right" CausesValidation="false">Get Estimates</Monarch:LinkButtonDefault> 
          <asp:LinkButton runat="server" ID="lnkbtnCancel" CssClass="button_secondary button_secondary_fixed" CausesValidation="false">Cancel</asp:LinkButton> 
          <div class="clear"></div> 
         </div> 
         <div class="clear"></div> 
        </td> 
       </tr> 
      </table> 
     </asp:Panel> 
     <asp:Panel runat="server" ID="pnlShippingOptions" DefaultButton="lnkbtnSetEstimate"> 
      <div class="shippingOptionsHolder" runat="server" id="divShippingOptionsHolder"> 
       <!-- Removed to shorten code snippet --> 
       <div class="buttonHolder"> 
        <Monarch:LinkButtonDefault runat="server" ID="lnkbtnSetEstimate" CssClass="button_action">Set Estimate</Monarch:LinkButtonDefault> 
        <div class="clear"></div> 
       </div> 
       <div class="clear"></div> 
      </div> 
     </asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 

牢記LinkBut​​tonDefault僅僅是這樣的:

public class LinkButtonDefault : LinkButton 
{ 
    private const string AddClickScript = "SparkPlugs.FixLinkButton('{0}');"; 

    protected override void OnLoad(EventArgs e) 
    { 
     string script = String.Format(AddClickScript, ClientID); 
     Page.ClientScript.RegisterStartupScript(GetType(), "click_" + ClientID, 
      script, true); 
     base.OnLoad(e); 
    } 
} 

最後,這裏是其餘的控制:

<asp:UpdatePanel runat="server" ID="upGetEstimate"> 
    <ContentTemplate> 
     <asp:LinkButton runat="server" ID="lnkbtnGetEstimate" CausesValidation="false">Get Estimate</asp:LinkButton> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<ajaxToolKit:ModalPopupExtender ID="shippingEstimatorPopupExtender" runat="server" TargetControlID="lnkbtnFake" PopupControlID="divShippingEstimatorPopup" BackgroundCssClass="monarchModalBackground"></ajaxToolKit:ModalPopupExtender> 
<asp:LinkButton runat="server" ID="lnkbtnFake" style="display:none;"/> 

<Monarch:PopupProgress ID="popupProgressGetEstimate" runat="server" AssociatedUpdatePanelId="upGetEstimate" /> 
<Monarch:PopupProgress ID="popupProgressGetEstimates" runat="server" AssociatedUpdatePanelId="upPopup" /> 

基本上,用戶點擊獲取估計,一個進度條出現,而它的l填寫表單,表單顯示在模式彈出窗口中。我猜這是簡單的,但我不能只是得到正確的組合,以正確地工作。

回答

2

首先嚐試一下如果使用腳本管理器在後面的代碼中註冊腳本會發生什麼。

我用這個方法來註冊腳本:

public static void RegisterStartupScript(Control c, string script) 
{ 
    if ((ToolkitScriptManager.GetCurrent(c.Page) as ToolkitScriptManager).IsInAsyncPostBack) 
     ToolkitScriptManager.RegisterStartupScript(c, c.GetType(), "Script_" + c.ClientID.ToString(), script, true); 
    else 
     c.Page.ClientScript.RegisterStartupScript(c.GetType(), c.ClientID, script, true); 
} 

此檢查,如果你在你的頁面有ScriptManager的。如果沒有,它使用完整的回發版本。