asp.net中运行时的确认对话框

时间:2009-08-05 18:32:17

标签: c# asp.net javascript

我有一个简单的内容管理系统,可以按Pagename和Version存储页面。单击Save后,我的代码(服务器端)检查是否存在Pagename / Version。

如果存在,我想显示一个确认对话框,要求用户确认是否应该替换当前的Pagename / Version。

实现这一目标的最简单方法是什么?谢谢。

5 个答案:

答案 0 :(得分:13)

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

如果他们点击OK,服务器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>

答案 1 :(得分: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;            
    }

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在页面中添加隐藏字段,例如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;
}