防止双重发布客户端

问题描述

TL;DR

按钮 btnAfdrukVoorbeeld 需要在单击 1 次后禁用,并在下载文件后重新启用,但不会触发 OnClientClick。我认为 `UpdatePanel` 阻止了这一点。删除“触发器”不起作用,因为没有回发。 尝试使用 js `__doPostBack("test","")` 但在 `PageLoad()` 中显示为空 禁用内联按钮 `OnClientClick="this.disabled = true;"` 有效,但会阻止触发 `OnClick`,因此这不是一个选项。

建议?

普通帖子:

我一直在尝试防止在使用 javascript 下载文件的按钮上出现双击可能性。

不幸的是,到目前为止我没有成功,因为我正在写这个问题。

在我看来应该相对简单,但是 <asp:UpdatePanel> 上带有 trigger postbackbutton 阻止了 onClientClick 被触发,因此我的 JS 函数不是调用。

OnClick 函数正在被触发,所以没有问题。

我也试过这样的内联:OnClientClick="this.disabled=true;" 但这可以防止 OnClick 事件被触发,这是(我后来了解到的)预期的。 也一直在摆弄 UpdatePaneltriggers,禁用它们或将 UpdatePanel Condition 更改为 always 但这并没有产生积极影响。 尝试使用 js __doPostBack("test","") 但在 PageLoad()...

中显示为空

想要的效果是按钮在单击后被禁用,事件被触发,因此页面下载为 pdf 并再次启用按钮。

我的第一个想法是使用 JS 禁用按钮,然后在“后端”重新启用它。 按钮:

<asp:Button ID="BtnAfdrukVoorbeeld" Visible="true" runat="server" ClientIDMode="Static"
            OnClick="ButtonAfdrukVoorbeeld_Click" OnClientClick="processafhandelen"
            CssClass="ZAButton button_phone_bottom" Text="afdrukvoorbeeld" />

我的 J:

function processafhandelen() {
    console.log('procesAfhandelen');
    var go_on = false;
    var imgSwirl = document.getElementById("<%= pnlSwirl.ClientID%>");
    var btnAfdr = document.getElementById('BtnAfdrukVoorbeeld');
    console.log(imgSwirl);
    console.log(btnAfdr);
    btnAfdr.disabled = true;
        if (imgSwirl.style.visibility == "visible") {
            //alert("Verzoek is al verzonden....,even geduld a.u.b!");
            return false;
        }
        else {
            console.log('disable btnAfdr')
            go_on = true;
            btnAfdr.disabled = false;
            showSwirl();
        }
        return go_on;
    }

    function showSwirl() {
        var imgSwirl = document.getElementById("<%= pnlSwirl.ClientID%>");
        if (imgSwirl) {
            imgSwirl.style.visibility = "visible";
            imgSwirl.style.display = "block";
        }
    }

更新面板:

<asp:Panel ID="Panel2" CssClass="DocumentOutPanelTextEditor DeleteTop" runat="server">
<asp:UpdatePanel ID="updPanel2" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <div id="divEditor" style='border: 0px groove #C0C0C0; width: 100%' runat="server">
            <telerik:RadPageLayout ID="RadPageLayout2" CssClass="desktoppagelayout formulieren" runat="server" GridType="Fluid" ShowGrid="false">
                <Rows>
                    <telerik:LayoutRow>
                        <Columns>
                            <telerik:LayoutColumn ID="LayoutColumn3" runat="server" Span="12">
                                <div class="clear"></div>
                            </telerik:LayoutColumn>
                        </Columns>
                    </telerik:LayoutRow>
                    <telerik:LayoutRow>
                        <Columns>
                            <telerik:LayoutColumn ID="LayoutColumn6" runat="server" Span="12">
                                <input id="varUnsaved" type="hidden" name="varUnsaved" runat="server" />
                                <telerik:RadAjaxManager ID="ramCorr" runat="server">
                                    <AjaxSettings>
                                        <telerik:AjaxSetting AjaxControlID="UDPCorrUitgaand">
                                            <UpdatedControls>
                                                <telerik:AjaxUpdatedControl ControlID="pnlButtonsCorr" />
                                            </UpdatedControls>
                                        </telerik:AjaxSetting>
                                    </AjaxSettings>
                                </telerik:RadAjaxManager>
                                <asp:Panel ID="pnlCorrUitgaand" Height="80%" Width="100%" runat="server">
                                    <asp:UpdatePanel ID="UDPCorrUitgaand" UpdateMode="Conditional" runat="server">
                                        <ContentTemplate>
                                            <%--<telerik:RadEditor ID="RadEditorCorrUitgaand" runat="server" Skin="Office2010Silver" EditModes="All"
                                        EnableResize="False" ToolsFile="~/App_Data/RadEditor/ToolsFile_CU.xml" Width="100%" Height="1150px"
                                        OnClientLoad="onClientLoad" OnClientPasteHtml="OnClientPasteHtml" OnClientCommandExecuting="OnClientCommandExecuting">
                                        <Content>                
                                        </Content>
                                    </telerik:RadEditor>--%>
                                            <script type="text/javascript" src="js/scriptradeditor.js"></script>
                                            <script type="text/javascript">
                                                TelerikDemo.rwUploadId = "<%=RadWindow1.ClientID%>";
                                                TelerikDemo.rnMessagesId = "<%=RadNotification1.ClientID%>";
                                                TelerikDemo.reId = "<%=RadEditorCorrUitgaand.ClientID%>";
                                            </script>
                                            <div class="container no-bg">
                                                <telerik:RadEditor
                                                    ID="RadEditorCorrUitgaand" runat="server" ToolbarMode="RibbonBar" Style="width: 875px; min-height: 1000px; height: 1000px"
                                                    EnableTrackChanges="true" EnableComments="true" ToolsFile="~/App_Data/RadEditor/word-like-tools-corr.xml"
                                                    EditModes="All" OnClientLoad="onClientLoadCorr" OnClientCommandExecuting="OnClientCommandExecuting" Language="nl-NL"
                                                    ImageManager-MaxUploadFileSize="512000" ExternalDialogsPath="~/App_Data/RadEditor/EditorDialogs">
                                                    <TrackChangesSettings CanAcceptTrackChanges="true" />
                                                    <DocumentManager ViewPaths="~/Files" UploadPaths="~/Files" />
                                                    <SpellCheckSettings DictionaryLanguage="nl-NL" />
                                                    <ExportSettings OpenInNewWindow="true" />
                                                    <ImageManager EnableAsyncUpload="False" EnableImageEditor="True" ContentProviderTypeName="FileStorageContentProvider,App_CODE" ViewMode="Grid" SearchPatterns="*.gif,*.jpg,*.jpeg,*.png,*.bmp" />
                                                    <Content></Content>
                                                </telerik:RadEditor>
                                            </div>
                                            <telerik:RadWindow ID="RadWindow1" runat="server" Title="Upload File" Behaviors="Close,Move" VisibleStatusbar="false" AutoSize="true">
                                            </telerik:RadWindow>
                                            <telerik:RadNotification ID="RadNotification1" runat="server" Width="350px" Height="150px" Title="An error occured" TitleIcon="warning"
                                                ContentIcon="info" Position="Center" AutoCloseDelay="5000" EnableRoundedCorners="true" EnableShadow="true">
                                            </telerik:RadNotification>
                                            <asp:HiddenField ID="RadFont" runat="server" />
                                            <asp:Image ID="imgProgress" runat="server" ImageUrl="~/Images/loading_small.gif" />
                                        </ContentTemplate>
                                    </asp:UpdatePanel>
                                </asp:Panel>
                            </telerik:LayoutColumn>
                        </Columns>
                    </telerik:LayoutRow>

                </Rows>
            </telerik:RadPageLayout>

            <telerik:RadPageLayout ID="RadPageLayout3" CssClass="desktoppagelayout knoppen footerPhone" runat="server" GridType="Fluid" ShowGrid="false">
                <Rows>
                    <telerik:LayoutRow Style="margin-top: 10px">
                        <Columns>
                            <telerik:LayoutColumn Span="5">
                                <asp:CheckBox ID="chkVergrendelen" runat="server" /><asp:Label Text="vergrendelen" runat="server" CssClass="label" />
                            </telerik:LayoutColumn>
                            <telerik:LayoutColumn ID="LayoutColumn7" runat="server" Span="6" Style="padding-left: 53px" CssClass="desktopcontainer-buttons">
                                <asp:Panel ID="pnlButtonsCorr" runat="server" Visible="true">
                                    <div id="divfoutmeldingen" class="divfoutmeldingen" runat="server" style="width: 100%;">
                                        <asp:Panel ID="PanelFout" Visible="false" runat="server" CssClass="error">
                                            <asp:Button ID="imgerrormelding" runat="server" CssClass="spritebase-no-block sprite-error" disabled />
                                            <asp:Label ID="lblError" ForeColor="Red" runat="server" Visible="true"></asp:Label>
                                        </asp:Panel>

                                        <asp:Panel ID="PanelOpgeslagen" Visible="false" runat="server" CssClass="success">
                                            <asp:Button ID="imgmelding" runat="server" CssClass="spritebase-no-block sprite-success" disabled />
                                            <asp:Label ID="lblOpgeslagenBericht" runat="server" Text="De gegevens zijn opgeslagen." />
                                        </asp:Panel>
                                    </div>
                                </asp:Panel>

                                <asp:Button ID="btnVerwijderen" Visible="true" runat="server" zafunction="delete"
                                    OnClick="btnVerwijderen_Click" CssClass="ZAButton button_phone_bottom" Text="verwijderen" />
                                <asp:Button ID="btnAnnuleren" Visible="true" runat="server"
                                    OnClick="btnAnnuleren_Click" CssClass="ZAButton button_phone_bottom" Text="annuleren" />
                                <asp:Button ID="BtnAfdrukVoorbeeld" Visible="true" runat="server" ClientIDMode="Static"
                                    OnClick="ButtonAfdrukVoorbeeld_Click" OnClientClick="processafhandelen" CssClass="ZAButton button_phone_bottom" Text="afdrukvoorbeeld" />
                                <asp:Button ID="btnOpslaanDoorgaan" zafunction="save" Visible="true" runat="server"
                                    OnClick="btnOpslaanDoorgaan_Click" CssClass="ZAButton button_phone_bottom" Text="opslaan" />
                                
                                                    <asp:Panel runat="server" ID="pnlSwirl" style="visibility:hidden;">
                                                        <asp:Image ID="imgSwirl" runat="server" ImageAlign="Right" ImageUrl="~/Images/loading_small.gif"/> Even geduld a.u.b.
                                                    </asp:Panel>
                            </telerik:LayoutColumn>

                        </Columns>
                    </telerik:LayoutRow>
                </Rows>
            </telerik:RadPageLayout>
        </div>

    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="BtnAfdrukVoorbeeld" />
    </Triggers>
</asp:UpdatePanel>
</asp:Panel>

C#:

 protected void ButtonAfdrukVoorbeeld_Click(object sender,EventArgs e)
{
    Patient patient = (Patient)Session["Patient"];
    Relatie relatie = null;
    if (patient == null)
    {
        patient = new Patient(SessionObject.XPSession);
    }

    radWindowManagerEmail.Windows.Clear();
    Sjabloon sjabloon = null;
    if (DropDownListSjabloon.SelectedValue != "0")
    {
        sjabloon = SessionObject.XPSession.FindByKey<Sjabloon>(Convert.ToInt32(DropDownListSjabloon.SelectedValue));
    }

    string nieuweContent = RadEditorCorrUitgaand.Content;
    if (sjabloon != null && sjabloon.Groep.Velden != null)
    {
        string[] sjabloonvelden = sjabloon.Groep.Velden.Split(new char[] { ';' });
        foreach (string veld in sjabloonvelden)
        {
            //**Do stuff**
        }

        string dir = Utils.GeefDataFolderNaam(true,@"Documenten\Uitgaand\");
        string FileDownloadName = "afdrukvoorbeeld";
        Gebruiker gebruiker = (Gebruiker)Session["Gebruiker"];
        Utils.createPDFNoFile(nieuweContent,FileDownloadName);
        updPanel2.Update();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...