Дочерние объекты частично отображаются как нулевые - PullRequest
1 голос
/ 25 сентября 2019

Я создаю пользовательский интерфейс, который принимает информацию о пользователе и выплевывает файл JSON (а также публикует данные в базе данных).Пользовательский интерфейс имеет форму, которая собирает все данные, а затем соответствующий контроллер передает эти данные через Newtonsoft для создания JSON.Проблема в том, что дочерние таблицы продолжают отображаться как «нулевые» в JSON, и я думаю, что неправильно настроил частичные представления.

Вот базовая модель, NPPR_Provider:

 [Table("NPPR_Provider", Schema ="AD")]
    public class NPPR_Provider : Provider
    {
        //...
        public NPPR_ServLocation NPPR_ServLocation { get; set; }
    }
}

Прямой ребенок поставщика - NPPR_ServLocation.Другие свойства, которые я пропустил, были просто первичными и внешними ключами.Базовый класс «Провайдер» просто предоставляет все имена столбцов, общих для разных типов провайдеров, которые есть в моей компании. Поля

NPPR_ServLocation хорошо отображаются в результирующем JSON, а его дочерние - нет.

public class NPPR_ServLocation
    {
        [Key]
        public int ServLocationId { get; set; }
        public int NPPRProvId { get; set; }
        public string EnrollmentType { get; set; }

        //... more column names that work as intended

        //Child Tables:
        public List<NPPR_Address> Address { get; set; }
        public List<NPPR_NPIAssociations> NPIAssociations { get; set; }
        //... more table names that do not work as intended
    }

Имена таблиц отлично работают для извлечения данных, поэтому я не думаю, что проблема в этом.Именно в установке данных, где я сталкиваюсь с этой проблемой.Все эти таблицы отображаются как «нулевые» в результирующем JSON.

Вот, например, как модель связей NPI передается из основного представления в его конкретное частичное:

Основное представление:

using Company.Namespace.Application.Models
@model NPPR_Provider

<section class="container">

    @using (Html.BeginForm("NPPRJsonFile", "Home", FormMethod.Post, new { @class = "form-horizontal", @id="NPPRTemplateForm", @onsubmit="validateNPPRTemplate(event)" }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true, String.Empty, new { @class = "text-danger" })
        @Html.Partial(partialFormsDir + "ServiceProvider")
        @Html.Partial(partialFormsDir + "ServiceLocation")
        @Html.Partial(partialFormsDir + "NPIAssoc", Model.NPPR_ServLocation.NPIAssociations)
        //... etc

И в NPIAssoc cshtml:

@using Company.Namespace.Application.Models
@model List<NPPR_NPIAssociations>

<div class="form-group">
    <h3 class="aetna-brand-heading">NPI Associations</h3>
</div>
<div class="form-group" id="npiHTML">
    <div class="col-sm-2">
        @Html.LabelFor(model => model.NPI, htmlAttributes: new { @class = "control-label" })
    </div>
    <div class="col-sm-4">
        @Html.EditorFor(model => model.NPI, new { htmlAttributes = new { id = "NPI", @class = "form-control", maxlength = 10, required = true } })
        <small class="help-block">Ten digit identifier, numeric values only</small>
    </div>
    // ...etc

И соответствующая модель:

[Table("NPPR_NPIAssociations", Schema = "AD")]
    public class NPPR_NPIAssociations : NPI_Associations
    {
        [Key]
        public int NPIAssocId { get; set; }
        public int ServLocationId { get; set; }
    }

public abstract class NPI_Associations
    {
        [Display(Name = "NPI Association")]
        [Required]
        [RegularExpression("^[0-9]*$")]
        [StringLength(10)]
        public string NPI { get; set; }
    }

И, наконец, сам контроллер:

public ActionResult NPPRJsonFile(NPPR_Provider provider)
        {
            string nppr_file = JsonConvert.SerializeObject(provider);
            ViewData["nppr_json"] = nppr_file;
            return View("NPPRJsonFile");
        }

По какой-то причине, когда я заполняю форму и отправляю, все дочерние таблицы NPPR_ServLocation поступают в JSON как "ноль".Не поля с ними, сами модели.Даже при правильном заполнении всех полей ввода.

"NPPR_ServLocation":{
    "ServLocationId":0,
    "NPPRProvId":0,
    "EnrollmentType":"I",
    "ProviderLocationId":null,
    "ProviderTypeCode":"29",
    "OrganizationType":"H",
    "Address":null,
    "IRSTaxAssociations":null,
    "NPIAssociations":null,
}

Вы можете видеть, начиная с Address, все они равны нулю.И все они настроены так же, как и NPIAssociations, как я показал выше.

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...