Я создаю пользовательский интерфейс, который принимает информацию о пользователе и выплевывает файл 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, как я показал выше.
Что я делаю не так?