【发布时间】:2009-08-05 18:32:16
【问题描述】:
我有一个简单的内容管理系统,它按页面名称和版本存储页面。单击保存后,我的代码(服务器端)检查页面名称/版本是否存在。
如果存在,我想显示一个确认对话框,要求用户确认是否应该替换当前的页面名称/版本。
实现此目的最简单的方法是什么?谢谢。
【问题讨论】:
标签: c# asp.net javascript
我有一个简单的内容管理系统,它按页面名称和版本存储页面。单击保存后,我的代码(服务器端)检查页面名称/版本是否存在。
如果存在,我想显示一个确认对话框,要求用户确认是否应该替换当前的页面名称/版本。
实现此目的最简单的方法是什么?谢谢。
【问题讨论】:
标签: c# asp.net javascript
<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>
【讨论】:
我很欣赏以前的两个答案,它们很有帮助,但不完全是我想要的。在考虑了回复并进行了更多研究后,我将发布我的解决方案,以便可能对其他人有所帮助。
按钮代码:
<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;
}
【讨论】:
另一种不需要 AJAX 的更简单的方法是允许正常回发,然后在代码隐藏中进行检查。
如果需要用户确认,只需将用户返回到同一页面,但显示一个额外的面板并隐藏原来的“保存”按钮。
在这个额外的面板中,使用另一个确定/取消按钮显示您的消息。当用户点击这个OK按钮时,执行保存!
【讨论】:
在将页面呈现给客户端之前进行检查。然后将处理程序(在客户端,例如 javascript)附加到显示确认框的保存按钮或表单(但前提是保存导致替换)。
【讨论】:
向您的页面添加一个隐藏字段,例如 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;
}
【讨论】: