今天在项目里的需求遇到“提交之前要弹窗用户确认后删除”,如果是confrim的话就很简单,直接OnClientClick=return aaa(); 在 function aaa()里写confrim并且根据用户的选择return一个true或者false就OK了。 但是项目是用的bootstrap的样式,要求使用bootstrap的模态框来弹窗提醒(bootstrap的提示框两个选项是单独的div或者button或者<a>标签等),我只能在aaa()里弹出bootstrap的模态框,但是模态框选择的什么不能返回到aaa()里,也返回不到 OnClientClick里。
请教过经理之后,给button添加了usesubmitbehavior=“false”,在浏览器按F12,可以看到OnClientClick事件最终被解析成:
最终被编译成 οnclick=“return Submit();if(true) _doPostBack('btn_submit','')”
UseSubmitBehavior 属性(摘自文档):
使用 UseSubmitBehavior 属性来指定 Button 控件使用客户端浏览器的提交机制还是 ASP.NET 回发机制。默认情况下,此属性的值为 true,从而导致 Button 控件使用浏览器的提交机制。如果指定为 false,则 ASP.NET 页框架将客户端脚本添加到页面,以将窗体发送到服务器。
当 UseSubmitBehavior 属性为 false 时,控件开发人员可以使用 GetPostBackEventReference 方法来返回 Button 的客户端回发事件。 GetPostBackEventReference 方法返回的字符串包含客户端函数调用的文本,可以插入到客户端事件处理程序中。
这样我们可以不再给Submit()方法返回ture和false,在需要提交的时候直接写 _doPostBack('按钮id','')来把form表单手动提交,代码如下
asp,net控件部分:
<asp:Button runat="server" CssClass="btn btn-success" UseSubmitBehavior="false" Text="Submit" ID="btn_submit" OnClientClick="return Submit()" />
js部分:
//提交按钮判断选中弹出模态框
function Submit() {
if (document.getElementById("NIL").checked) {
$("#delConfirm").modal('show');
}
//如果NIL复选框没被选中,直接_doPostBack()提交
else
__doPostBack('btn_submit', '');
}
bootstrap弹窗部分:
<--删除弹窗confirm-->
<div id="delConfirm" class="modal hide">
<div class="modal-header">
<button data-dismiss="modal" class="close" type="button">×</button>
<h3>confirms your actions </h3>
</div>
<div class="modal-body">
<p>您勾选了NIT,Charge信息将被清空,您确定这样做吗</p>
</div>
<div class="modal-footer">
<--如果选择sure确认,则直接调用chargeBack()方法提交-->
<a data-dismiss="modal" class="btn btn-primary" onclick="chargeBack()">Sure</a>
<a data-dismiss="modal" class="btn" >Cancel</a>
</div>
</div>
//chargeBack里直接就是提交
function chargeBack(sub) {
__doPostBack('btn_submit', '');
}