Ajax Json调用MVC4控制器方法参数始终为空

时间:2013-08-12 11:34:56

标签: ajax json jquery asp.net-mvc-4

我正在使用Ajax和MVC4 Web应用程序。将值传递给action方法时遇到问题。它始终将null作为参数值传递。 这是我的代码。

    function onChange(arg) {
    var adrId = $.map(this.select(), function (item)
    {
        return $(item).find('td').first().text();
    });

      GetEntries(adrId);//Calling the function

    }

function GetEntries(adrId) {

    //alert("AdrId >> "+adrId); here it shows value is 3465

    $.ajax({
        url: 'Customer/LoadCustomer',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ adrId: adrId }),
        success: function (result) {
            alert("success");
        }
    });
} 


    [HttpPost]
    public JsonResult LoadCustomer(string adrId)//HERE value is ALLWAYS NULL.. :(
    {
        Address_SelectW adrList = new Address_SelectW();
        adrList = this.commonObj.CustomersSelectByAdrKy(cky, usrKy, AdrKy);
        return Json(adrList, JsonRequestBehavior.AllowGet);
    }

请帮我解决这个问题。谢谢.. :))

=============================================== ============================ 其他信息......

我用另一个来插入数据。它工作得很好..

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

    //var ContactID = $("#txtContactId").val();
    var Company = $("#txtCompany").val();
    var Status = $("#cmbStatus").val();
    var IsActive = $("#IsActive").is(':checked');
    var Comments = $("#txaComments").val();
    var Country = $("#cmbCountry").val();
    var Address1 = $("#txtAddress1").val();
    //var Address2 = $("#txtAddress2").val();
    var City = $("#txtCity").val();
    var State = $("#txtState").val();
    var PostalCode = $("#txtPostalCode").val();
    var VatNo = $("#txtVatNo").val();
    var RegNo = $("#txtRegNo").val();
    var Phone = $("#txtPhone").val();
    var Email = $("#txtEmail").val();
    var AdrKey = $("#AdrID").val();


    $.ajax({
        url: "Customer/InsertCustomer",
        data: {
            //'ContactID': ContactID,
            'Company': Company,
            'Status': Status,
            'IsActive': IsActive,
            'Comments': Comments,
            'Country': Country,
            'Address1': Address1,
            //'Address2': Address2,
            'City': City,
            'State': State,
            'PostalCode': PostalCode,
            'VatNo': VatNo,
            'RegNo': RegNo,
            'Phone': Phone,
            'Email': Email
        },
        dataType: "json",
        type: 'POST',
        success: function (data) {
            alert("Successfully Inserted!");
        },
        error: function () {
            alert("error");
        }
    });


});



    [HttpPost]
    public ActionResult InsertCustomer(string Company, int Status, bool IsActive, string Comments, int Country, string Address1, string City, string State, string PostalCode, string VatNo, string RegNo, string Phone, string Email)
    {
        AdrCustomModel model = new AdrCustomModel();
        bool process = false;

        model.Company = Company;
        model.Status = Status;
        model.IsActive = IsActive;
        model.Comments = Comments;
        model.Country = Country;
        model.Address1 = Address1;
        model.City = City;
        model.State = State;
        model.PostalCode = PostalCode;
        model.VatNo = VatNo;
        model.Phone = Phone;
        model.RegNo = RegNo;
        model.Email = Email;
        model.cky = cky;

        model.ContactID = this.CustomerID(Status);

        process = this.commonObj.InsertAdrCustomer(model,usrKy);

        Accounts_Select accmodel = new Accounts_Select();
        accmodel.CKy = cky;
        accmodel.AccCd = model.ContactID;
        accmodel.AccNm = Company;
        accmodel.AccTypKy = this.commonObj.AccTypeKyByPrefixKy(Status);

        process = this.commonObj.InsertAccount(accmodel, usrKy);

        return Json(process, JsonRequestBehavior.AllowGet);
    }

我不知道为什么这个工作正常而且那个工作不正常。我已经尝试了 JsonResult ActionResult 到Action方法。并尝试使用和不使用 [HttpPost] 。 但总是参数值为NULL

4 个答案:

答案 0 :(得分:1)

我不确定它是否能解决你的问题,但你可以尝试一下。

在控制器方法中放置[WebMethod]属性。

或者您可以传递带有附加ID的网址,例如

'Customer/LoadCustomer'+ adrId

答案 1 :(得分:0)

将属性名称放在引号中:

data: JSON.stringify({ 'adrId': adrId }),

答案 2 :(得分:0)

在第一个示例中,您发送一个JSON对象,在第二个示例中,您只发布数据。

只发送一个值,JSON不必要地复杂化。试试这个:

$.ajax({
    url: 'Customer/LoadCustomer',
    type: 'POST',        
    data: {'adrId': adrId },
    dataType: 'json',
    success: function (result) {
        alert("success");
    }
});

答案 3 :(得分:0)

它需要与您想要传递给Action方法的参数连接“”。

    function GetEntries(adrId) {

 var NewAdrId = ""+adrId; //<<<<<<<<<<<< Answer<<<<<<<<<<<<<<


$.ajax({
    url: 'Customer/LoadCustomer',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ adrId: NewAdrId }),
    success: function (result) {
        alert("success");
    }
});

}

//谢谢:)