没有为Ajax JQuery调用时的类型定义的无参数构造函数

时间:2015-08-03 08:56:53

标签: c# jquery asp.net ajax

执行Ajax JQuery时出现以下错误:

enter image description here

以下是我使用的代码:
IPRRequest.cs类代码(.dll)

public static bool IsValidBarcodeTest(Guid? requestID, string barCode)
        {
            bool result = true;

            Dictionary<string, object> input = new Dictionary<string, object>()                { 
                {"@RequestID", requestID},
                {"@BarcodeNo", barCode}
            };
            Data data = new Data();
            DataTable dt = data.ExecuteQuery(CommandType.StoredProcedure, "Invoice.usp_tbl_Request_Select_CheckDuplicateBarcode_Test", input);
            if (dt.Rows.Count > 0)
            {
                result = Helper.GetDBValue<int>(dt.Rows[0][0]) == 0;
            }
            return result;
        }

.aspx.cs页码:

public abstract class Check
    {
        public abstract Guid? requestID { get; set; }
        public abstract string barCode { get; set; }
    }

    [WebMethod]
    [ScriptMethod]
    public static bool CheckDuplicate(Check chk)
    {
        bool isExist = false;

        isExist = IPRRequest.IsValidBarcodeTest(chk.requestID, chk.barCode);

        return isExist;
    }

Ajax JQuery代码:

<script type="text/javascript">
    $(document).ready(function () {
        $("[id*=btnSave]").bind("click", function () {

            var chk = {};
            chk.requestID = $("[id*=TempGUID]").text();
            alert(chk.requestID);
            chk.barCode = $("[id*=txtBarcodeNumber]").val();
            alert(chk.barCode);

            $.ajax({
                type: 'POST',
                url: "IPRForm_EditCheck.aspx/CheckDuplicate",
                data: '{chk: ' + JSON.stringify(chk) + '}',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (data) {

                    var val = data.d;
                    alert(val);

                    if (val == true) {
                        alert("Barcode Number already exist in system database.");
                    }
                    else {
                        alert("Barcode Number does not exist");
                    }

                },
                error: function (data) {
                    alert(data.responseText);
                },
            });
            return false;
        });
    });
</script>

存储过程

Select 
        Case When count(1) > 0
            Then 1 --Exist
            Else 0 --Not Exist
        End As Duplicate
    From Invoice.tbl_Request(NOLOCK)
    Where  BarcodeNo = @BarcodeNo
        And (@RequestID Is Null Or RequestID <> @RequestID)

请回复我的代码中的错误。
请注意,我是Ajax JQuery和Web方法的新手 提前谢谢。

1 个答案:

答案 0 :(得分:2)

.NET需要创建Check类型的对象作为参数传递给WebMethod CheckDuplicate。 它不能创建抽象类的对象。

如果您将class Check更改为以下内容,则应该有效:

public class Check
{
    //This constructor is needed, but .NET will create 
    //it automatically if no other constructors are defined
    public Check() { }

    private Guid? requestID;
    private string barCode;

    public Guid? RequestId
    {
        get { return requestID; }
        set { requestID = value; }
    }

    public string BarCode
    {
        get { return barCode; }
        set { barCode = value; }
    }
}