好吧,我必须假设用户正在点击某个按钮,例如删除、订购或其他任何按钮。
所以,一个平面简纽扣就有能力做到这一点。
常规按钮有两个事件存根:
One for the server side event
One for the client side event
而且,事实证明,如果客户端事件返回 false,则服务器端按钮单击事件不会运行。关于我们在这里需要的东西,这真是太完美了。
所以,说这个超级简单的标记:
<asp:Button ID="cmdStart" runat="server" Text="Start the reactor!"
CssClass="btn"
OnClick="cmdStart_Click"
OnClientClick="return myprompt()"
/>
<script>
function myprompt() {
var bolOK = confirm("Really start the Reactor?")
return bolOK
}
</script>
所以,请注意按钮如何有 2 个事件。 (服务器和客户端)。
如果客户端单击事件返回 false,则服务器按钮/代码不会运行。
(我们为 JavaScript 代码返回 false)。
因此,上面看起来像这样:
如果你点击确定,然后服务器按钮运行。
所以,这里不需要一些隐藏的控件等。
请记住,如果代替那些“非常丑陋”的内置浏览器对话框,您可能想要采用 say say sweet alert,甚至是 jQuery.UI 对话框。
今天这样的对话框(和几乎所有的 JavaScript)代码不应该使用阻塞代码。允许这样做的浏览器中仅有的 2 个特性是 alter() 和 confirm()。并且在未来,由于阻止和冻结浏览器的能力,它们很可能会被删除。
然而,一个可爱/酷的技巧可以用于这种异步对话。
所以,假设我们想对 jQuery.UI 对话框做同样的事情。
所以,现在,我们的按钮看起来像这样:
<asp:Button ID="cmdDelete" runat="server" Text="Delete Record" CssClass="btn"
OnClick="cmdDelete_Click"
OnClientClick="return mydelprompt2(this)"
/>
<div id="mydeldiv" style="display:none">
<h2>Delete this record, are you sure Yes/no?</h2>
</div>
<script>
mydelpromptok = false
function mydelprompt2(btn) {
if (mydelpromptok) {
mydelpromptok = false
return true
}
var mydiv = $("#mydeldiv")
mydiv.dialog({
modal: true, appendTo: "form",
title: "delete", closeText: "",
width: "20%",
position: { my: 'left top', at: 'right bottom', of: btn },
buttons: {
Ok: (function () {
mydiv.dialog("close")
mydelpromptok = true
btn.click()
}),
Cancel: (function () {
mydiv.dialog("close")
})
}
});
return false;
}
</script>
现在,我当然可以创建一个系统范围的弹出对话框。
所以在上面,当你点击按钮时,客户端代码运行,弹出对话框然后返回 false!!!!
当用户点击“确定”时,我们设置 mydelpromptok = true 然后再次单击相同按钮!!!
现在单击按钮运行客户端,它现在返回 true,然后服务器端代码运行。
这看起来像这样:
jQuery.UI 必须添加到您的项目中,假设我们已经有了 jQuery。
我非常喜欢 jQuery.UI 对话框,因为您可以将它们放在用户单击的位置。
对话框部分要求您在页面中有一个“div”。
所以,说这个标记:
<asp:Button ID="cmdDelete" runat="server" Text="Delete Record" CssClass="btn"
OnClick="cmdDelete_Click"
OnClientClick="return mydelprompt2(this)" />
<div id="mydeldiv" style="display:none">
<img src="../Content/Rhotel.jpg" style="float:left" />
<h4><i>Delete this Hotel, are you sure?</i></h4>
</div>
<script>
mydelpromptok = false
function mydelprompt2(btn) {
if (mydelpromptok) {
mydelpromptok = false
return true
}
var mydiv = $("#mydeldiv")
mydiv.dialog({
modal: true, appendTo: "form",
title: "Delete Hotel?", closeText: "",
width: "20%",
position: { my: 'left top', at: 'right bottom', of: btn },
dialogClass: "dialogWithDropShadow",
buttons: {
Ok: (function () {
mydiv.dialog("close")
mydelpromptok = true
btn.click()
}),
Cancel: (function () {
mydiv.dialog("close")
})
}
});
return false;
}
</script>
现在的结果是这样的:
所以,你不需要你在这里尝试的所有隐藏的东西。
如果你赶时间,你甚至可以将客户端确认 RIGHT 放入按钮中,并且没有时间像上面的第二个例子那样进行一些花哨的对话。
所以,你可以/可以这样做:
<asp:Button ID="cmdStart" runat="server" Text="Start the reactor!"
CssClass="btn"
OnClick="cmdStart_Click"
OnClientClick="return confirm('Really do this?')"
/>
因此,我们甚至不需要调用客户端 js 例程,我们只需将 js 表达式直接放入上面的按钮即可。