我正在尝试使用ImageButton控件进行客户端脚本执行。我可以使用OnClientClick属性指定要执行的客户端脚本,但是如何阻止它在每次用户单击时尝试发布?单击此按钮时没有理由发布。我已将CausesValidation设置为False,但这并不能阻止它发布。
答案 0 :(得分:19)
我知道这个问题已经得到解答,但一个简单的解决方案是从HTML onclick方法(即ASPX OnClientClick方法)返回false,例如
<asp:ImageButton ID="ImageNewLink" runat="server"
ImageUrl="~/images/Link.gif" OnClientClick="DoYourStuff(); return false;" />
返回false会阻止浏览器将请求发回服务器i.s.停止.NET回发。
答案 1 :(得分:4)
这是你可以做到的一种方式,而不会与其他控件的回发功能发生冲突:
将按钮定义如下:
<asp:Button runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="alert('my client script here');my" />
OnClientClick处理程序中的“my”结尾是一种别名asp.net的__doPostBack客户端事件的方法,它强制回发;我们只是通过不执行任何类似于此脚本的操作来覆盖行为:
<script type="text/javascript">
function my__doPostBack(eventTarget, eventArgument) {
//Just swallow the click without postback of the form
}
</script>
编辑:是的,我觉得我需要洗一些我需要拉的肮脏技巧才能让asp.net做我想做的事。
答案 2 :(得分:2)
另一个解决方案是定义一个不执行任何操作的PostBackUrl
<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../>
答案 3 :(得分:1)
<image src="..." onclick="DoYourThing();" />
答案 4 :(得分:1)
使用服务器端图像控件
<asp:Image runat="server" .../>
非常确定您可以将客户端onclick
事件添加到其中。
答案 5 :(得分:1)
这对我很有用:
使用OnClientClick
编写脚本和PostBackUrl="javascript:void(0);"
以避免回发。
<div class="close_but">
<asp:ImageButton ID="imgbtnEChartZoomClose" runat="server" ImageUrl="images/close.png" OnClientClick="javascript:zoomclosepopup();" PostBackUrl="javascript:void(0);" />
</div>
答案 6 :(得分:1)
解决方案1
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="return false;" />
OR 解决方案2
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="yourmethod(); return false;" />
此外(解决方案2),您的javascript方法可能采用此形式
<script type="text/javascript">
function yourmethod() {
__doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3);
}
</script>
中的代码
protected void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack) {
string eventTarget = this.Request("__EVENTTARGET") == null ? string.Empty : this.Request("__EVENTTARGET");
string eventArgument = this.Request("__EVENTARGUMENT") == null ? string.Empty : this.Request("__EVENTARGUMENT");
}
}
答案 7 :(得分:0)
使用OnClientClick编写脚本,PostBackUrl =“javascript:void(0);”避免回发