วิธีปิดการใช้งาน Postback บนปุ่ม asp (System.Web.UI.WebControlsbutton)


135

ฉันมีปุ่ม asp เป็นฝั่งเซิร์ฟเวอร์ดังนั้นฉันจึงสามารถแสดงได้สำหรับผู้ใช้ที่ล็อกอินเท่านั้น แต่ฉันต้องการให้เรียกใช้ฟังก์ชันจาวาสคริปต์และดูเหมือนว่าเมื่อ runat = "เซิร์ฟเวอร์" จะเรียกเหตุการณ์หลังกลับเสมอ

ฉันยังมีปุ่มปกติ ( <input...>) ไม่ทำงานที่เซิร์ฟเวอร์และใช้งานได้ดี ...

ฉันจะทำให้ปุ่มนี้รันเฉพาะจาวาสคริปต์และไม่โพสต์แบ็คได้อย่างไร

คำตอบ:


264

ให้ javascript ของคุณส่งคืนเท็จเมื่อเสร็จสิ้น

<asp:button runat="server".... OnClientClick="myfunction(); return false;" />

16
ในหลาย ๆ กรณีผู้คนใช้ onclick หรือ OnClientClick กับไวยากรณ์นี้ <asp: Button OnClientClick = "myFunction ()" /> โดยที่ myFunction () ส่งคืนค่าเท็จและยังไม่เพียงพอคุณต้องใช้ OnClientClick = "return myFunction ()"
Bron Davies

17
ฉันต้องเพิ่ม UseSubmitBehavior = "False" เช่นเดียวกับ; return false
rob

9
อย่าลืมเพิ่ม 'CausesValidation = "false"' มิฉะนั้นจะเพิ่ม 'WebForm_DoPostBackWithOptions' และมาร์กอัปพิเศษอีกมากมาย
Carter Medlin

สิ่งนี้ไม่ได้ผลสำหรับฉันใน ASP.NET 4+ แต่คำตอบของคอนสแตนตินก็OnClientClick="return false"ใช้ได้ผล
TylerH


15

คุณสามารถใช้ jquery click action และใช้ฟังก์ชันPreventDefault ()เพื่อหลีกเลี่ยงการโพสต์แบ็ค

<asp:button ID="btnMyButton" runat="server" Text="MyButton" />


$("#btnMyButton").click(function (e) {
// some actions here
 e.preventDefault();
}

นี่เป็นคำตอบที่สวยงามเพราะช่วยให้คุณสามารถทดสอบเงื่อนไขเพื่อปิดใช้งานได้
John Mott

1
อย่าใช้ PreventDefault เพราะจะหยุดเหตุการณ์อื่น ๆ ที่อาศัยเหตุการณ์นี้ -1
Piotr Kula

1
@ppumkin: PreventDefault เป็นวิธีที่ดีในการบอกผู้ฟังเหตุการณ์อื่น ๆ ว่าคุณจัดการเหตุการณ์นี้เพื่อที่พวกเขาจะได้ไม่ต้องทำเช่นนั้น ฉันคิดว่าสิ่งที่คุณหมายถึงคือ stopPropagation ซึ่งจะหยุดเหตุการณ์ไม่ให้ได้ยินโดยผู้ฟังเหตุการณ์อื่น ๆ
Sebbas

เย้ ๆ ๆ ๆ ๆ ๆ ไม่. 4 ปีต่อมาและฉันยืนอยู่เบื้องหลังสิ่งนี้มากยิ่งขึ้นในตอนนี้ อย่าทำอย่างนั้น
Piotr Kula

8

พิจารณาสิ่งนี้.

<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequest);
function BeginRequest(sender, e) {
    e.get_postBackElement().disabled = true;

}
     </script>

6

คนอื่นถูกต้องที่คุณต้องการให้ติดต่อกลับเพื่อส่งคืนเท็จ อย่างไรก็ตามฉันต้องการเพิ่มว่าการทำโดยการตั้งค่า onclick เป็นวิธีเก่า ๆ ที่น่าเกลียดในการทำสิ่งต่างๆ ผมอยากแนะนำให้อ่านเกี่ยวกับจาวาสคริปต์ไม่สร้างความรำคาญ การใช้ไลบรารีเช่นjQueryอาจทำให้ชีวิตของคุณง่ายขึ้นและ HTML น้อยลงเมื่อรวมกับจาวาสคริปต์ของคุณ (และตอนนี้Microsoft รองรับ jQuery แล้ว!)


4

ASP.NET จะสร้างasp:Buttonเป็นinput type=submitไฟล์.
หากคุณต้องการปุ่มที่ไม่ทำโพสต์ แต่ต้องการการควบคุมสำหรับองค์ประกอบทางฝั่งเซิร์ฟเวอร์ให้สร้างอินพุต HTML แบบง่ายพร้อมแอตทริบิวต์type=buttonและrunat=server.

หากคุณปิดใช้งานการคลิกการกระทำOnClientClick=return falseมันจะไม่ทำอะไรเลยเมื่อคลิกเว้นแต่คุณจะสร้างฟังก์ชันเช่น:

function btnClick() {
    // do stuff
    return false;
}

3

คุณไม่ได้บอกว่าคุณกำลังใช้. NET framework เวอร์ชันใด

หากคุณใช้ v2.0 ขึ้นไปคุณสามารถใช้คุณสมบัติ OnClientClick เพื่อเรียกใช้ฟังก์ชัน Javascript เมื่อเหตุการณ์ onclick ของปุ่มถูกยกขึ้น

สิ่งที่คุณต้องทำเพื่อป้องกันไม่ให้เกิดการโพสต์แบ็คเซิร์ฟเวอร์คือการส่งคืนfalseจากฟังก์ชัน JavaScript ที่เรียกว่า


3

นอกจากนี้สำหรับคำตอบที่ยอมรับคุณสามารถใช้ UseSubmitBehavior = "false" MSDN


ASP.NET เพิ่ม; __doPostBack(ไปที่ท้ายสคริปต์คลิกไคลเอนต์
IvanH

3

ในกรณีของฉันฉันแก้ไขการเพิ่มผลตอบแทนใน onClientClick:

รหัสหลัง

function verify(){
  if (document.getElementById("idName").checked == "") {
    alert("Fill the field");
    return false;
  }
}

ออกแบบพื้นผิว

<asp:Button runat="server" ID="send" Text="Send" onClientClick="return verify()" />

วิธีเรียกใช้OnClickวิธีหลังจากนี้
5377037

2

คุณสามารถใช้รหัส:

<asp:Button ID="Button2" runat="server"
     Text="Pulsa"
     OnClientClick="this.disabled=true"
     UseSubmitBehavior="False"/>

ถ้า nee ส่ง

...
<form id="form1" runat="server" onsubmit="deshabilita()">
...
<script type="text/javascript">
    function deshabilita()
    {
        var btn = "<%= Button1.ClientID %>";
        if (confirm("Confirme postback"))
        {
            document.getElementById(btn).disabled = true;
            return true;
        }
        return false;
    }
</script>


2

ด้วย Validation

ในตัวอย่างนี้ฉันใช้สองการควบคุมddlและtxtboxมีความสุขในการเขียนโค้ด

 asp:ScriptManager ID="script1" runat="server" /asp:ScriptManager

    asp:UpdatePanel ID="Panel1" runat="server"
       ContentTemplate

// ASP BUTTON
asp:Button ID="btnSave" runat="server" Text="Save" class="btn btn-success" OnClientClick="return Valid()" OnClick="btnSave_Click"


   /ContentTemplate    
    /asp:UpdatePanel    

  <script type="text/javascript">
        function Valid() {

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val() == 0) {
                alert("Please select YOUR TEXT");
                $("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }

            if ($("#ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").val().length == 0) {
                alert("Please Type YOUR TEXT");
                $("ctl00_ContentPlaceHolder1_YOUR CONTROL NAME").focus();
                return false;
            }
            return true;
        }
</script>

2

คุณสามารถใช้ JQuery สำหรับสิ่งนี้

<asp:Button runat="server" ID="btnID" />

กว่าใน JQuery

$("#btnID").click(function(e){e.preventDefault();})

0

คุณเพียงแค่ต้องคืนค่าเท็จจากไฟล์

function jsFunction() {
  try {
    // Logic goes here
    return false; // true for postback and false for not postback
  } catch (e) {
    alert(e.message);
    return false;
  }
}
<asp:button runat="server" id="btnSubmit" OnClientClick="return jsFunction()" />

ฟังก์ชัน JavaScript ดังต่อไปนี้

หมายเหตุ * : ใช้บล็อก try-catch เสมอและส่งคืน false จาก catch block เพื่อป้องกันการคำนวณที่ไม่ถูกต้องในฟังก์ชัน javaScript

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.