2014-10-10 43 views
1

我試圖使用Html Display For Template來循環模型數據。在我的顯示模板中,我想使用EditorFor模板來顯示不同的數據集。這樣做時,我遇到了我的子模型爲空的問題。在玩了大衛之後,我得到了David的指導。下面,請找到我更新的工作解決方案。EditorForTemplate DisplayForTemplate MVC Razor

UPDATE(正確的解決方案)

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

你能告訴我們更多的代碼,這裏沒有足夠的診斷問題。 – DavidG 2014-10-10 15:23:03

+0

以上發佈更新。讓我知道你是否需要更多信息。 – bladerunner 2014-10-10 15:32:54

回答

0

在您的父視圖中,您只傳遞模型的TargetingAreaOrderItems,但子視圖期望TargetingAreaViewModel。相反,你應該通過整個模型:

@Html.DisplayFor(m => m) 
+0

當我這樣做時,我在這裏得到一個錯誤。 @ Html.Label(Model.MediaTypeDesc,new {@style =「font-weight:bold; padding-top:10px; font-size:18px;」}) – bladerunner 2014-10-10 15:57:58

+0

想通了。非常感謝David爲我指引正確的方向。我的模型搞砸了,重組之後,我能夠實現我所期待的。我會在上面更新我的解決方案。由於它能幫助我做出正確的舉動,因此將您的帖子標記爲答案。 – bladerunner 2014-10-10 18:44:49