2010-04-24 39 views
7

Tôi đang cố gắng sử dụng điều khiển ImageButton để thực thi tập lệnh phía máy khách. Tôi có thể chỉ định kịch bản phía máy khách để thực thi bằng cách sử dụng thuộc tính OnClientClick, nhưng làm cách nào để ngăn chặn nó cố gắng đăng mỗi khi người dùng nhấp vào nó? Không có lý do gì để đăng khi nút này được nhấp. Tôi đã đặt CausesValidation thành False, nhưng điều này không ngăn nó gửi bài.Tôi có thể tạo một ASP.NET ImageButton không postback?

+0

Bất kỳ lý do nào không chỉ sử dụng sự kiện onclick của thẻ img? –

+0

@BigJason: Tôi muốn tránh nó nếu có thể. Nút này rất phức tạp và được xây dựng trên phía máy chủ. – Giffyguy

Trả lời

4

Dưới đây là một cách để bạn có thể làm điều đó mà không mâu thuẫn với các chức năng postback của các điều khiển khác:

Xác định nút một cái gì đó của bạn như thế này:

<asp:Button runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="alert('my client script here');my" /> 

Các "tôi" kết thúc trong xử lý cho OnClientClick là một cách để bí danh sự kiện khách hàng __doPostBack của asp.net đã buộc postback; chúng tôi chỉ đơn giản là ghi đè lên các hành vi bằng cách làm không có gì giống với kịch bản này:

<script type="text/javascript"> 

function my__doPostBack(eventTarget, eventArgument) { 
    //Just swallow the click without postback of the form 
} 
</script> 

Edit: Yeesh, tôi cảm thấy như tôi cần phải đi tắm sau khi một số trong những thủ đoạn bẩn thỉu mà tôi cần để kéo để có được asp. net để làm những gì tôi muốn.

+1

Bí quyết" của tôi "hoạt động với tôi, nhưng do đó đã làm "trở lại sai" ở cuối mà làm cho tôi cảm thấy ít icky – Carl

+0

Tôi đang có cùng một vấn đề ... http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button trong khi-hiển thị-một-popup-sử dụng-jquery. Tôi chuẩn bị kiểm tra giải pháp của bạn ngay bây giờ. – SearchForKnowledge

1
<image src="..." onclick="DoYourThing();" /> 
+0

Điều đó sẽ hoàn hảo, ngoại trừ việc nút này được xây dựng động trên phía máy chủ và cần phải là đối tượng .NET. – Giffyguy

+0

Bạn luôn có thể có điều khiển 'asp: Literal' trên trang của mình và trong mã của bạn đằng sau văn bản được đặt động, ví dụ:' myLiteral.Text = ""; ' –

1

Sử dụng một điều khiển hình ảnh phía máy chủ

<asp:Image runat="server" .../> 

Đẹp, chắc chắn bạn có thể thêm các sự kiện khách hàng onclick đó.

2

Một giải pháp khác sẽ được xác định một PostBackURL mà không làm gì

<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../> 
19

Tôi biết vấn đề này đã được trả lời nhưng một giải pháp đơn giản là để trả về false từ HTML onclick phương pháp (tức là phương pháp ASPX OnClientClick) ví dụ

<asp:ImageButton ID="ImageNewLink" runat="server" 
ImageUrl="~/images/Link.gif" OnClientClick="DoYourStuff(); return false;" /> 

Trả về false sẽ dừng trình duyệt yêu cầu quay lại máy chủ i.s. dừng postback .NET.

+0

Tôi muốn đề xuất một tùy chọn bổ sung của OnClientClick = "return DoYourStuff();". Sau đó trả về false bên trong DoYourStuff(). Bằng cách này, DoYourStuff có thể trả về true hoặc false tùy thuộc vào các yếu tố khác và có khả năng vẫn cho phép postback cho một số điều kiện nhất định. – TTT

+0

Nếu tôi có nhiều nút trong GridView, tôi chỉ hoạt động lần đầu tiên và bất kỳ lúc nào sau đó, chức năng không kích hoạt. http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button-while-displaying-a-popup-using-jquery – SearchForKnowledge

+0

@TTT Đó là những gì tôi đã thử trước, nhưng vì một lý do nào đó nó không hoạt động. Mặc dù, nếu tôi đặt 'return false;' trong 'OnClientClick' như CodeClimber được đề xuất, nó hoạt động. – TheWanderingMind

1

này hoạt động tuyệt vời cho tôi:

Sử dụng OnClientClick để viết kịch bản của bạn và PostBackUrl="javascript:void(0);" để tránh postback.

<div class="close_but"> 
    <asp:ImageButton ID="imgbtnEChartZoomClose" runat="server" ImageUrl="images/close.png" OnClientClick="javascript:zoomclosepopup();" PostBackUrl="javascript:void(0);" /> 
    </div> 
1

Giải pháp 1

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg" 
OnClientClick="return false;" /> 

HOẶC Giải pháp 2

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg" 
OnClientClick="yourmethod(); return false;" /> 

Ngoài (giải pháp 2), phương pháp javascript của bạn có thể theo hình thức này

<script type="text/javascript"> 
    function yourmethod() { 
    __doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3); 
    } 
</script> 

trong mã phía sau

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"); 
    } 
} 
0

Sử dụng OnClientNhấp để viết tập lệnh của bạn và PostBackUrl = "javascript: void (0);" để tránh postback

Các vấn đề liên quan