Chirag
Chirag

Reputation: 317

how can i prevent code behind method call in asp.net

I am creating registration page and doing null field validation on submit button click using jquery. if there is any error in form validation then i am preventing default method call using jquery, so it will not call code behind button click event.

Problem: sometimes user double clicked on button and this is calling code behind button click event two times with two database row insertion having a same data.

I tried lots of solution but unfortunately i couldn't make any success. Please help me to solve out this problem if you have any solution.

Thanks in advance,

Upvotes: 1

Views: 2494

Answers (6)

Chirag
Chirag

Reputation: 317

Actually, i was preventing default server side method call in jquery when button is clicked using e.PreventDefault() method of jquery if validation is false. Don't know what was the problem but when i set function on client click of button and return true/false based on validation instead of e.PreventDefault, trick worked great for me.

Thanks to all who comment on this question.

Upvotes: 2

Satinder singh
Satinder singh

Reputation: 10198

Sample code

Client Side:

   $("#submit").click(function () {

          if (!YourvalidationFunction) 
              {
                    return false;
              }
           else {
                  //ajax_function is a folder contain Default.asmx page and insertNewRecord is function name (server side)
                   $.ajax({
                   type: "POST",
                   url: "ajax_function/Default.asmx/insertNewRecord",
                   data: "{ 'prefix': '" + dataString + "'}",
                   contentType: "application/json; charset=utf-8",
                   dataType: "json",
                   success: OnSuccessinsertingwcCall,
                   error: OnErrorCall
                    });
                 }
            });

Server Side:

[WebMethod]
public string[] insertNewRecord(string prefix)
{
         string status = "";
         List<string> d = new List<string>();
         try
         {
           // logic code for insertion if success set msg
             status = "New record inserted";
         }
         catch (Exception ac)
         {
             status = " Error occurs";
         }
         d.Add(string.Format("{0}", status));
         return d.ToArray();
 }

Upvotes: 0

Manish Parmar
Manish Parmar

Reputation: 859

try this it might help for your asp button

<asp:Button runat="server" ID="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" UseSubmitBehavior="false" OnClientClick="ValidationCode(event); return false;" />

    <script>
        function ValidationCode()
        {
            //Code of validtion
            event.preventDefault();
            if(true)
            {
                __dopostback:("btnSubmit","");
            }
        }
    </script>

Upvotes: 0

Josef Prochazka
Josef Prochazka

Reputation: 1283

Add disabled attribute to your button as the first thing in your js method.

function func(event) {

$("#button").prop("disabled", true);

..... }

Upvotes: 0

Darren
Darren

Reputation: 70728

Use one on the client side. This will prevent double clicks.

$("#button").one("click", function() {
      // validate the form.

      // if form is valid, submit form
});

An alternative solution is to have a boolean flag.

var submitting = false;

   $("#button").click(function() {        
          if (!submitting) {
             submitting = true;

             if (formIsValid) {
                 submitting = false;
                 $("#form").submit();
             } else {
                 submitting = false;
              }
          }
   });

Upvotes: 0

Tum
Tum

Reputation: 7585

Simply add a variable called 'loading' for example and check if the ajax call is busy:

At the top of your code:

var loading = false;

Then on form submit:

$('#form').submit() {
    if(loading)
        return false;

    loading = true;

    //Ajax call
    $.ajax({
    type: "POST",
    url: "somePage.php",
    data: $('#form').serialize(),
    success: function(response) {
        loading = false;
            //Your response code
    }
    });
}

Upvotes: 0

Related Questions