I have viewmodel with nested collection. I want to post that form through ajax but I cant serialize it properly. Here is my view
@model ARM.Presentation.ViewModels.SecurityFormProfileViewModel
@{
ViewData["Title"] = "EditSecurityProfile";
}
<hr />
<div class="offset-1 row">
<div class="col-md-12">
<form asp-action="EditSecurityProfile" autocomplete="chrome-off" method="post" id="security-
profiles-form">
<div class="form-row">
<div class="form-group">
<input asp-for="ProfileId" type="hidden" class="form-control" />
</div>
<div class="offset-2 col-md-2">
<h3>@Model.ProfileName</h3>
</div>
<div class="col-md-2">
<h5>Select Area to Filter Items</h5>
<select id="areaid" class="form-control" asp-items="@Model.MainAreasList">
</select>
</div>
</div>
<div class="form-row mt-2">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="col-md-6">
<div class="form-group">
<vc:security-form profile-id="@Model.ProfileId" area-id="null"></vc:security-form>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<arm-submitbtn id="formprofilesubmit"></arm-submitbtn>
<arm-cancelbtn id="formprofilecancel"></arm-cancelbtn>
</div>
</div>
</form>
</div>
</div>
<div class="offset-2 col-12">
<vc:users-by-security-profile profile-id="@Model.ProfileId"></vc:users-by-security-profile>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
<script src="~/js/Areas/Administration/Views/SecurityProfiles/SecurityProfiles.js"></script>
<script src="~/js/Areas/Administration//Views/SecurityProfiles/SecurityProfilesService.js">
</script>
}
And here is my view component that I have called in the above view.
@model SecurityFormProfileViewModel
<div id="forms">
<table class="table">
<thead>
<tr>
<td></td>
<td>Form Name</td>
<td></td>
<td></td>
<td></td>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.SecurityForms.Count; i++)
{
<tr>
<td>
<input type="hidden" asp-for="@Model.SecurityForms[i].FormId" />
<input type="hidden" asp-for="@Model.SecurityForms[i].AreaId" />
</td>
<td>
<label class="form-check-label">@Model.SecurityForms[i].FormName</label>
</td>
@foreach (var item in Model.SecurityForms[i].AccessLevels)
{
<td>
<div class="form-check form-check-inline">
<input class="form-check-input" asp-for="@Model.SecurityForms[i].SelectedAccessLevelId" type="radio" id="inlineRaio1"
value="@item.AccessTypeId">
<label class="form-check-label">@item.AccessType</label>
</div>
</td>
}
</tr>
}
</tbody>
</table>
</div>
For all above I am using view model which has nested collections. Here is my view model that want to serialize from the view using jquery.
public class SecurityFormProfileViewModel
{
public int ProfileId { get; set; }
public string ProfileName { get; set; }
public List<SecurityFormViewModel> SecurityForms { get; set; }
public IEnumerable<SelectListItem> MainAreasList { get; set; }
}