Я пытаюсь вернуть вложенные данные обратно на мой контроллер, и в зависимости от решений, которые я пробовал, я получаю либо нулевые, либо полностью пустые модели.
Модели, отправленные для просмотра, имеют значения данных, например, Description = "Some Description"
на контроллере, если модель не равна нулю, то Description = null
.
Я пробовал с различными предложениями, [Здесь] (. NET Core / MVC - Просмотреть проводку нулевой модели обратно в контроллер ), [Здесь] (https://askguanyu.wordpress.com/2017/05/11/asp-net-mvc-post-to-controller-with-nested-class-collection-null-issue-and-how-to-fix/) и [здесь] (MVC Модель потомка объект null в сообщении HTTP ), чтобы назвать несколько.
Мои классы моделей:
public class AdminAccountInfo
{
public UserProfile UserProfileInfo { get; set; }
public ContactsFormModel ContactsFormModel { get; set; }
public List<WebPageModel> WebElement { get; set; }
}
public class WebPageModel
{
public string PageName { get; set; }
public string Description { get; set; }
public int WebPageId { get; set; }
public Boolean RoleLevel { get; set; }
public Boolean AreaLevel { get; set; }
public Boolean CountryLevel { get; set; }
public Boolean OperatorLevel { get; set; }
public Boolean AdvertLevel { get; set; }
public Boolean visible { get; set; }
public List<WebPageElementModel> ElementViewDatas { get; set; }
}
public class WebPageElementModel
{
public int PageElementId { get; set; }
public string ActionName { get; set; }
public string Description { get; set; }
public bool visible { get; set; }
public bool enabled { get; set; }
}
Мой контроллер
public ActionResult Index() // Cut down for brevity
{
AdminAccountInfo _accountInfo = new AdminAccountInfo();
List<WebPageModel> pages = new List<WebPageModel>();
pages = GetData(); // Cut down for brevity
_accountInfo.WebElement = pages;
_accountInfo.ContactsFormModel = contactsmodel;
_accountInfo.UserProfileInfo = _profile;
return View(_accountInfo);
}
public ActionResult SaveWebPageInfo(List<WebPageModel> pageElement)
// Также попытались: publi c ActionResult SaveWebPageInfo ([Bind (Prefix = "WebElement")] List webElement) {ModelState.DumpErrors ();
if (ModelState.IsValid)
{
var testing = webElement;
if(success)
SAY WOW!
}
}
Я использовал этот пост как с обычной моделью, так и с тем, что я думал Возможно, это была Модель с привязкой.
Индекс:
// Cut down for brevity
@using ad_admin.ViewModels;
@model AdminAccountInfo
@{
ViewBag.Title = "User Profile";
//Layout = "~/Shared/_Layout.cshtml";
}
<div class="row">
@Html.Partial("_UserInfo", Model.UserProfileInfo)
</div>
<div class="row">
@Html.Partial("_ContactInfo", Model.ContactsFormModel)
</div>
<div class="row">
@Html.Partial("_PagesHolder", Model.WebElement)
</div>
</div>
Для PagesHolder
Я попытался вызвать EditorTemplates
как напрямую @Html.EditorFor(x => Model)
, так и с для l oop @for (int i = 0; i < Model.Count(); i++)
Редактор шаблонов
// Editor page
// Cut down for brevity
WebPageModel.cshtml
@model WebPageModel
<div class="card">
<div class="card-header">
<h2 class="mb-0">
<button type="button" class="btn btn-link" data-toggle="collapse" data-target="#@Model.PageName"><span class="alignleft bold">Name:</span><span class="alignleft"> @Model.PageName</span><span class="text-align-center bold">Description:</span><span class="text-align-center"> @Model.Description</span></button>
</h2>
</div>
<div id=@Model.PageName class="collapse" aria-labelledby="headingOne" data-parent="#myAccordion">
<div class="card-body">
<div class="form-group row">
<label class="col-lg-2 control-label">Country Level</label>
<div class="col-lg-3">
@Html.CheckBox("Country", Model.CountryLevel)
</div>
</div>
@Html.EditorFor(x => Model.ElementViewDatas)
// I have also tried the below
@*for (int i = 0; i < Model.Model.ElementViewDatas.Count(); i++)
{
@Html.EditorFor(x => Model.ElementViewDatas[i])
}*@
</div> and some more </div>
// Editor page
// Cut down for brevity
WebPageElementModel.cshtml
@model WebPageElementModel
<div class="form-group row">
@Html.Hidden(Model.PageElementPermissionId.ToString())
<label class="control-label font15 bold"><span class="bold">Element Name: </span></label> @Html.Label(Model.ActionName, new { @class = "control-label" })
<label class="control-label"><span class="col-lg-1"></span>Description: </label> @Html.Label(Model.Description, new { @class = "control-label" })
<label class="control-label"><span class="col-lg-1"></span>Is Visible: @Html.CheckBox("Is Visible", Model.visible)</label>
<label class="control-label"><span class="col-lg-1"></span>Is Enabled: @Html.CheckBox("Is Enabled", Model.enabled)</label>
</div>
Любая помощь будет принята с благодарностью.