【问题标题】:Confirmation dialog at runtime in asp.net运行时在 asp.net 中的确认对话框
【发布时间】:2009-08-05 18:32:16
【问题描述】:

我有一个简单的内容管理系统,它按页面名称和版本存储页面。单击保存后,我的代码(服务器端)检查页面名称/版本是否存在。

如果存在,我想显示一个确认对话框,要求用户确认是否应该替换当前的页面名称/版本。

实现此目的最简单的方法是什么?谢谢。

【问题讨论】:

    标签: c# asp.net javascript


    【解决方案1】:
    <asp:Button OnClientClick="return confirm('Are you sure you want to go?');" 
                Text="Confirm" runat="server" onclick="Unnamed1_Click" />
    

    如果他们点击OK,服务器的onclick事件就会发生,如果他们点击cancel,就像他们没有按下按钮一样,当然,你可以随时在cancel部分添加功能。

    可能是这样的:

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title>
        <script type="text/javascript">
            function CompareConfirm() 
            {
                var str1 = "abc";
                var str2 = "def";
    
                if (str1 === str2) {
                    // your logic here
                    return false;
                } else {
                    // your logic here
                    return confirm("Confirm?");
                }
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button OnClientClick="return CompareConfirm();" 
                Text="Confirm" runat="server" onclick="Unnamed1_Click" />
        </div>
        </form>
    </body>
    </html>
    

    【讨论】:

    • 我认为他想在服务器端而不是在 javascript 中进行比较。
    【解决方案2】:

    我很欣赏以前的两个答案,它们很有帮助,但不完全是我想要的。在考虑了回复并进行了更多研究后,我将发布我的解决方案,以便可能对其他人有所帮助。

    按钮代码:

     <asp:Button ID="btnSave" OnClick="btnSaveClick" runat="server" Text="Save" OnClientClick="return CheckForVersion()" />
    

    Javascript:

    <script language="javascript">
        function CheckForVersion() {
            PageMethods.CheckForVersion(aspnetForm.ctl00$ContentPlaceHolder1$ddlPageName2.value, aspnetForm.ctl00$ContentPlaceHolder1$txtContentName2.value, OnSucceeded, OnFailed);
            return false;
        }
    
        function OnSucceeded(results) {
           if(results) {
                //version exists so prompt user
                if(confirm("Version already exists. Do you want to overwrite?")) {
                    __doPostBack('ctl00$ContentPlaceHolder1$btnSave','');
                }
            }
            else
            {
                //version does not exist so save it without prompting user
                __doPostBack('ctl00$ContentPlaceHolder1$btnSave',''); 
            }
    
        }
    
        function OnFailed(error) {
            // handle pagemethod error
            alert(error.get_message());
        }
    
    </script>
    

    使用 Subsonic 2.1 的 C#:

    [WebMethod]
        public static bool CheckForVersion(string pageName, string versionName)
        {
            PageContentCollection pages = new PageContentCollection().Where("pageName", pageName).Where("versionName", versionName).Load();
            if (pages.Count > 0)
                return true;
            else
                return false;            
        }
    

    【讨论】:

      【解决方案3】:

      另一种不需要 AJAX 的更简单的方法是允许正常回发,然后在代码隐藏中进行检查。

      如果需要用户确认,只需将用户返回到同一页面,但显示一个额外的面板并隐藏原来的“保存”按钮。

      在这个额外的面板中,使用另一个确定/取消按钮显示您的消息。当用户点击这个OK按钮时,执行保存!

      【讨论】:

        【解决方案4】:

        在将页面呈现给客户端之前进行检查。然后将处理程序(在客户端,例如 javascript)附加到显示确认框的保存按钮或表单(但前提是保存导致替换)。

        【讨论】:

        • 用户在文本框中输入页面名称/版本名称,所以我不确定在渲染之前如何检查。我想我可以在 javascript 中使用 pagemethod 进行检查,但这是最好的方法吗?
        • 如果您只是检查两个字符串,您可以在 javascript 中进行,在 JS 中执行 CompareConfirm() 方法并在 asp:Button OnClientClick 事件中调用它,比较两个字符串并获得方法返回 Confirm()。我将在下面的回答中详细说明。
        【解决方案5】:

        向您的页面添加一个隐藏字段,例如 Hiddenfield1

        然后添加这个函数

        public  bool Confirm(string MSG)
        {
            string tmp = "";
            tmp = "<script language='javascript'>";
            tmp += "document.getElementById('HiddenField1').value=0; if(confirm('" + MSG + "'))           document.getElementById('HiddenField1').value=1;";
            tmp += "</script>";
            Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "ConfirmBox", tmp);
            if(HiddenField1.Value.Trim()=="0") return false;
            return true;
        }
        

        【讨论】:

        • 我在 IE9 和 FF26 上尝试了这种技术,但没有看到任何确认对话框出现。没有错误,只是没有确认对话框。导致此类问题的最常见原因是什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2011-05-02
        相关资源
        最近更新 更多