簡體   English   中英

使用AJAX發送到MVC中的控制器時,嵌套的javascript對象屬性為null

[英]Nested javascript object properties are null when sent to the controller in MVC using AJAX

我的模型中包含以下實體。

 public class Provider
{
    public int ProviderId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string SSN { get; set; }
    public string NPI { get; set; }
    public ProviderDetails ProviderDetails { get; set; }

}

public class ProviderDetails
{
    public int ProviderDetailsId { get; set; }
    public string Certification { get; set; }
    public string Specialization { get; set; }
    public string TaxonomyCode { get; set; }
    public string ContactNumber { get; set; }
    public string ContactEmail { get; set; }
    public int ProviderId { get; set; }
}

我有以下控制器操作方法。

 [HttpPost]
    public ActionResult CreateProvider(Provider provider)
    {
        try
        {
            int providerCreationSuccessful = _repository.CreateProvider(provider);
            if (providerCreationSuccessful == 1)
                TempData["userIntimation"] = "Provider Registered Successfully";

            return RedirectToAction("ShowTheListOfProviders");
        }
        catch (Exception Ex)
        {
            _logger.Error(Ex.Message);
            return View("Error");
        }
    }

如圖所示,我正在使用AJAX將數據發送到控制器。

self.createProviderDetails = function () {
    $.ajax({
        url: "/Provider/CreateProvider/",
        type: "POST",
        data: fillModel(),
        async: false,
        success: function (result) {
            if (result.url) {
                location.href = result.url;
            }
        }
    }).fail(
             function (xhr, textStatus, err) {
                 alert(err);
             });
};

fillmodel函數是

var fillModel = function () {
    var providerData =
        {
            ProviderId: self.providerID(),
            FirstName: self.firstName(),
            LastName: self.lastName(),
            SSN: self.SSN(),
            NPI: self.NPI(),
            ProviderDetails: {
                ProviderDetailsId: 0,
                Certification: self.certification(),
                Specialization: self.specialization(),
                TaxonomyCode: self.taxonomyCode(),
                ContactNumber: self.contactNumber(),
                ContactEmail: self.contactEmail(),
                ProviderId: self.providerID()          
            }   
        }
    return providerData;
}

對象數據在Javascript方面很好,但在控制器上,嵌套的對象為null,如下所示。

在此處輸入圖片說明

請讓我知道,關於我在做什么錯。我無法弄清楚這一點。

傳遞相同名稱的列和屬性,然后傳遞到模型中,然后在傳遞到控制器中時在模型中應可見,

data: JSON.stringify({
     model: {
                 "Column1": $("#Column1").val(),
                 "Column2": $("#Column2").val(),
                 "Column3": $("#Column3").val(),
                 "Column4": $("#Column4").val(),
           }),

並通過這樣的模型,因為上一次找到這種類型的問題,然后我已經解決了這個問題。

 self.createProviderDetails = function () {
        $.ajax({
            url: "/Provider/CreateProvider/",
            type: "POST",
            data: fillModel(),
            async: false,
datatype : "json",
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                if (result.url) {
                    location.href = result.url;
                }
            }
        }).fail(
                 function (xhr, textStatus, err) {
                     alert(err);
                 });
    };

嘗試將AJAX請求的dataType指定為'json':

self.createProviderDetails = function () {
    $.ajax({
        url: "/Provider/CreateProvider/",
        type: "POST",
        data: fillModel(),
        dataType: "json", // specify data type
        async: false,
        success: function (result) {
            if (result.url) {
                location.href = result.url;
            }
        }
    }).fail(
             function (xhr, textStatus, err) {
                 alert(err);
             });
};

另一個非常常見的錯誤是方括號[]。 在構建嵌套對象時要小心。

 var object = {
     NestedObject: [{ Column1: "value1" }], //error
     NestedObject: { Column1: "value1" }, // Good.
 }

如果對Name的列和嵌套的列使用引號,則沒有區別:

 var object = {
     "NestedObject": { "Column1": "value1" }, // Good.
 }

您將把對象放在控制器中。 但是無論如何,最重要的是指定數據類型:JSON

 $.ajax({
    url: "/Provider/CreateProvider/",
    type: "POST",
    data: fillModel(),
    dataType: "json", // specify data type JSON
    success: function (result) {

    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM