EditorForTemplate внутри MVC бритвы DisplayForTemplate

1

Я пытался использовать 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. Прекрасно работает!!

  • 0
    Можете ли вы показать нам больше своего кода, здесь недостаточно для диагностики проблемы.
  • 0
    Пост обновлен выше. Дайте мне знать, если вам нужно больше информации.
Теги:
asp.net-mvc

1 ответ

0
Лучший ответ

В ваших родительских представлениях вы проходите только в TargetingAreaOrderItems модели, но дочерний вид ожидает TargetingAreaViewModel. Вместо этого вы должны пройти во всей модели:

@Html.DisplayFor(m => m)
  • 0
    Когда я это делаю, я получаю ошибку здесь. @ Html.Label (Model.MediaTypeDesc, new {@style = "font-weight: bold; padding-top: 10px; font-size: 18px;"})
  • 0
    Догадаться. Большое спасибо, Дэвид, за то, что направил меня в правильном направлении. Моя модель была испорчена, поэтому после ее реорганизации я смог добиться того, что искал. Я обновлю свое решение выше. Помечу ваш пост как ответ, поскольку он помог мне сделать правильный ход.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню