简体   繁体   中英

Calling a C# method from Javascript and executing the code inside the

I have a Javascript function I am calling from C# code behind when a user clicks an OnRowDeleting call from a GridView. Here is that Call and method

 OnRowDeleting="GridView1_RowDeleting"
 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {  
       ClientScript.RegisterStartupScript(GetType(), "hwa", "Ealert();", true);       
    }

It then calls that JS code and asks a question to the user. Based on whether they hit yes or no. I need it the JS to send a call to a C# method. Here is the JS code and the C# code that it is supposed to call.

<script> ...JS..
    function Ealert() {
            //var test = document.getElementById("hdField");
            bootbox.confirm({
            message: "Did you send the renewal email associated with this client?",
            buttons: {
                confirm: {
                    label: 'Yes',
                    className: 'btn-success'
                },
                cancel: {
                    label: 'No',
                    className: 'btn-danger'
                }
            },
                callback: function (result) {
                    if (result == true) {
                        bootbox.alert({
                            message: "Thank you",
                            size: 'medium'
                        });
                      // document.getElementById('<%=hdField.ClientID %>').value = "true"; 
                    } else {
                            bootbox.alert({
                            message: "Please go back to your saved location\n and send the renewal email.",
                            size:'small'
                        });
                        // document.getElementById('<%= hdField.ClientID %>').value = "false";
                        PageMethods.testCSharp();
                        function onSuccess(result) {
                        alert(result);
                         }

                         function onFailure(result) {
                         alert("Failed!");
                        }

                    }                        
                    console.log('This was logged in the callback: ' + result);

                }          
        });
    }     

C#

 [WebMethod]
    public static void testCSharp(bool result, GridView GridView1, object sender, EventArgs e)
    {
        bool variable = result;
        string t = result.ToString();

        MessageBox.Show(t);

        string UniqClient = GridView1.SelectedRow.Cells[1].Text;
        string UniqPolicy = GridView1.SelectedRow.Cells[3].Text;
        string emailed = "No";
        string query = "UPDATE [Reviewed_Renewal_Policy] SET [Emailed] = @emailed where where ([UniqClient] = @UniqClient) AND ([UniqPolicy] = @UniqPolicy)";

        using (SqlConnection conn = new SqlConnection("Data Source=GTU-BDE01;Initial Catalog=GTU_Apps;Integrated Security=True"))
        {
            using (SqlCommand comm = new SqlCommand(query, conn))
            {
                comm.Parameters.AddWithValue("@UniqClient", UniqClient);
                comm.Parameters.AddWithValue("@UniqPolicy", UniqPolicy);
                comm.Parameters.AddWithValue("@emailed", emailed);
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
            }
        }


        return;

    }

The issue is the PageMethods call to this method never works. I was receiving and error that PageMethods wasn't setup correctly, but changing the method to public static void fixed it. However, it executes nothing in the method itself.

I had the SQL query commented out and used the MessageBox.Show as a test, but it doesn't work. Does anyone have any idea why or how I can have this code executed based off what option is chosen in the JavaScript? Thanks for the help

You need to use an Ajax call in order send a value to your C# function.

    $.ajax({
    data: formData,
    method: "Post",
    url: url,
    processData: false,
    contentType: false,
    success: function (d) {
       SuccessMessage(successMsg);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        ErrorMessage(errorMsg);
    }
});

Something similar to this. URL will be the path to your c# method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM