无法使用ajax从javascript调用c#方法

时间:2016-05-17 12:50:23

标签: javascript jquery asp.net ajax asp.net-ajax

我有一个c#方法,我想在客户端调用。 我用ajax调用来实现这个

function ValidateIfDuplicate()
        {
            debugger

            var billtext = $("#ctl00_ContentPlaceHolder2_textBoxBillNumber").val();
            var retailer= $("#ctl00_ContentPlaceHolder2_dropDownListRetailers").val();
            var billdate = $("#ctl00_ContentPlaceHolder2_textBoxBillDate").val();

            if (billtext == "")
            {
                alert("Bill Number cannot be left empty");
                return false;
            }
            else if (retailer == 0) {
                alert("Please select a Retailer");
                return false;
            }
            else if (billdate == '') {
                alert("Date cannot be left empty");
                return false;
            }
            else if (billtext != '' && retailer != '' && billdate != '')
            {


                    $.ajax({
                        Type: "POST",
                        url: "CAInvoiceEntry.aspx/ValidateDuplicateEntry",
                        contentType: "application/json; charset=utf-8",
                        data: { billtext1: billtext, billdate1: billdate, retailer1: retailer },
                        dataType: "json",
                        success: function (result) {
                            debugger
                            alert(result.d);
                        }
                    });

                return true;
            }
        }

这是我的c#方法

[System.Web.Script.Services.ScriptService] 
public partial class CAInvoiceEntry: BaseClass
{
    [WebMethod, ScriptMethod()]
        public static int ValidateDuplicateEntry(string billtext1, string billdate1, string retailer1)
        {
            string validatebill = objCAInvoiceEntry.validatebilldate(textBoxBillNumber.Text, billdate1.ToString(), ViewState[AppConstants.UploadedBy].ToString(), dropDownListRetailers.SelectedValue);
            if (validatebill == "1")
            {

                return 1;
            }
            else
                return 0;
        }
}

但不会触发Web方法。 我也尝试使用pagemethods.methodname()作为替代方法(通过使用enablepagemethods = true对脚本进行registring),但没有效果。

如果有人可以指导我做错了吗? 只是为了清楚.. 在下图中,您可以看到断点执行,跳过ajax调用。 enter image description here

3 个答案:

答案 0 :(得分:1)

我今天面临着类似的问题。在我的情况下,我在App_start文件夹中有RouteConfig,所以我通过评论此行解决了我的问题

//settings.AutoRedirectMode = RedirectMode.Permanent;

这是问题的原因。

同样您的网络方法需要公开且静态

类似

public static int MethodName()
{
    // your method
}

答案 1 :(得分:0)

你的javascript中有一个小错字。请记住,javascript区分大小写。你传递的是:

Type: "POST"

但实际上你应该传入:

type: "POST"

如果在“网络”选项卡上使用F12,您会注意到当前的AJAX调用正在发出GET请求,而不是POST请求。

答案 2 :(得分:0)

您通过ajax传递参数的方式似乎存在问题。 试试这个。

if (billtext != '' && retailer != '' && billdate != '')
            {

               debugger

               $.ajax({
                   type: "POST",
                   url: "CAInvoiceEntry.aspx/ValidateDuplicateEntry",
                   data: "{ billtext1:" + "'" + billtext + "'" + ", billdate1:" + "'" + billdate + "'" + ", retailer1:" + "'" + retailer + "'" + "}",
                   contentType: "application/json; charset=utf-8",
                   dataType: "json",
                   async: true,
                   cache: false,
                   success: function (msg) {
                       if (msg == "1")
                                       alert("Already exists");
                                   else
                                       alert("valid");
                   },
                   error: function (msg) {
                       debugger;
                       alert(msg);
                   }
               })
               return false;


            }