UpdatePanel, ModalPopupExtender и введите проблемы нажатия клавиш - PullRequest
2 голосов
/ 01 сентября 2011

Иметь панель UpdatePanel, которая содержит 2 панели с кнопками по умолчанию, настроенными на прослушивание нажатий клавиш.Эта UpdatePanel является PopupControl для 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>

Имейте в виду, что LinkButtonDefault просто так:

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" />

Обычно пользователь нажимает кнопку Get Estimate, при загрузке формы появляется индикатор выполнения, форма отображается в модальном всплывающем окне.Я предполагаю, что это что-то простое, но я не могу просто получить правильную комбинацию, чтобы заставить это работать должным образом.

1 Ответ

2 голосов
/ 14 декабря 2011

Прежде всего, попробуйте, что произойдет, если вы используете скрипт-менеджер для регистрации скрипта в коде.

Я использую этот метод для регистрации скриптов:

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 на вашей странице.Если это не так, он использует полную версию обратной передачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...