我可以创建一个不回发的ASP.NET ImageButton吗?

时间:2010-04-24 04:51:28

标签: asp.net post postback submit imagebutton

我正在尝试使用ImageButton控件进行客户端脚本执行。我可以使用OnClientClick属性指定要执行的客户端脚本,但是如何阻止它在每次用户单击时尝试发布?单击此按钮时没有理由发布。我已将CausesValidation设置为False,但这并不能阻止它发布。

8 个答案:

答案 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);”避免回发