在ASP.NET中运行时的确认对话框

11
我有一个简单的内容管理系统,按Pagename和Version存储页面。点击保存后,我的代码(服务器端)会检查Pagename / Version是否存在。
如果存在,我想显示一个确认对话框,询问用户是否确认应该替换当前的Pagename / Version。
如何最简单地实现这一点?谢谢。
5个回答

16
<asp:Button OnClientClick="return confirm('Are you sure you want to go?');" 
            Text="Confirm" runat="server" onclick="Unnamed1_Click" />
如果用户点击“确定”,服务器上的onclick事件将会发生,如果他们点击“取消”,就好像他们根本没有按下按钮一样。当然,你总是可以为取消部分添加功能。
也许可以写成这样:
<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中。 - Muhammad Akhtar

7

我很感激之前的回答,它们很有帮助但不完全符合我的要求。在考虑了这些回复并进行了更多的研究后,我发布了我的解决方案,希望能帮助其他人。

按钮代码:

 <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的替代方法是允许正常提交,然后在代码后台进行检查。

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

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


0
在向客户端呈现页面之前,先进行检查。然后,在保存按钮或表单上附加一个处理程序(例如JavaScript),以显示确认框(但仅在保存结果导致替换时)。

用户在文本框中输入页面名称/版本名称,因此我不确定在渲染之前如何进行检查。我想我可以在JavaScript中使用pagemethod进行检查,但这是最好的方法吗? - Geri Langlois
如果你只是想比较两个字符串,你可以在JavaScript中实现它,在JS中编写一个CompareConfirm()方法,并在asp:Button的OnClientClick事件中调用它,比较这两个字符串并让该方法返回Confirm()。我将在下面的答案中详细解释一下。 - Carlo

-1
在您的页面中添加一个隐藏字段,例如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上尝试了这种技术,但是我没有看到任何确认对话框弹出。没有错误,只是没有确认对话框。这种问题最常见的原因是什么? - Tevya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接