Я пытался использовать Html Display For Template для прокрутки данных модели. Внутри моего шаблона отображения я хотел использовать шаблон EditorFor, который будет отображать другой набор данных. При этом у меня возникали проблемы, когда моя дочерняя модель была пуста. Поиграв и получив указания от Дэвида, я смог заставить это работать. Ниже приведено мое обновленное рабочее решение.
ОБНОВЛЕНИЕ (правильное решение)
public class TargetingAreaViewModel
{
public int DealerId { get; set; }
public int OrderId { get; set; }
public List<TargetingAreaOrderItemViewModel> TargetingAreaOrderItems { get; set; }
public TargetingAreaViewModel()
{
this.TargetingAreaOrderItems = new List<TargetingAreaOrderItemViewModel>();
}
}
public class TargetingAreaOrderItemViewModel
{
public int OrderItemId { get; set; }
public int PackageMediaTypeId { get; set; }
public string PackageMediaTypeHeader { get; set; }
public string MediaTypeDesc { get; set; }
public string TargetingAdditonalInfo { get; set; }
public List<TargetingAreaItemViewModel> TargetingAreaItems { get; set; }
public TargetingAreaOrderItemViewModel()
{
this.TargetingAreaItems = new List<TargetingAreaItemViewModel>();
}
}
public class TargetingAreaItemViewModel
{
public int OrderItemId { get; set; }
public int PackageMediaTargetingFieldId { get; set; }
public string TargetingAreaFieldTitle { get; set; }
public string TargetingValue { get; set; }
public bool IsEnabled { get; set; }
public bool IsRequired { get; set; }
public string Comment { get; set; }
}
Родительский просмотр
@model Models.TargetingAreaViewModel
@{
ApplicationContext.Current.PageTitle = "Targeting Info";
Layout = "~/Views/Shared/MainLayout.cshtml";
}
@using (Html.BeginForm("OrderItemTargetingInfo", "Home", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.DisplayFor(m => m.TargetingAreaOrderItems)
<div class="col-sm-12">
<div class="pull-right">
<input id="Submit" type="submit" value="Submit" class="btn btn-primary" />
</div>
</div>
}
Просмотр шаблона DisplayFor
@model Models.TargetingAreaOrderItemViewModel
<div class="row">
<div class="col-sm-12">
<div class="col-sm-12 btn-primary" style="margin-bottom: 10px; margin-top: 10px;">
@Html.Label(Model.MediaTypeDesc, new { @style = "font-weight: bold; padding-top: 10px; font-size: 18px;" })
@Html.HiddenFor(m => m.OrderItemId)
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
@Html.Raw(Model.PackageMediaTypeHeader)
</div>
</div>
<br />
<div class="row">
<div class="col-sm-12">
@Html.EditorFor(m => m.TargetingAreaItems)
</div>
</div>
<br />
<div class="row">
<div class="col-md-12">
<div class="form-group">
@Html.Label("Additional Info:", new { @class = "control-label col-md-2" })
<div class="col-md-6">
@Html.TextAreaFor(m => m.TargetingAdditonalInfo, new { @class = "form-control" })
</div>
</div>
</div>
</div>
Теперь я могу отображать данные, извлекать данные из своей модели в Post. Прекрасно работает!!
В ваших родительских представлениях вы проходите только в TargetingAreaOrderItems
модели, но дочерний вид ожидает TargetingAreaViewModel
. Вместо этого вы должны пройти во всей модели:
@Html.DisplayFor(m => m)