2016-10-03 67 views
1

我想我已經讀過關於此的每一篇文章,但仍不知道爲什麼下面的強制鍵入模型的自定義編輯器模板根本不顯示。它肯定正在執行Recipient.cshtml模板編輯器,因爲我在TextboxFor行上放置了一個斷點,並且該行命中了兩次,一次用於在Controller中設置的每個收件人名稱,但是當它完成時,頁面顯示爲空模型項目(主頁面上的提交按鈕仍然顯示)。如果我取消註釋RenderPartial行,並註釋掉EditorFor,那麼收件人顯示效果會很好,但當然ID沒有正確列舉,因此我無法發佈。據我所知,我必須使用編輯器模板爲了正確列舉ID並允許發佈收件人模型。強類型編輯器模板不顯示

任何人都可以看到我可能做錯了或建議一種替代方法來呈現此列表與正確的ID?

謝謝!

型號:

[DataContract(Name = "recipient")] 
public class Recipient 
{ 
    [Display(Name = "Email")] 
    public string eMail { get; set; } 

    [Display()] 
    public string Name { get; set; } 
} 

控制器:

[HttpGet] 
public ActionResult CreateRecipients() 
{ 
    var recp = new List<Recipient>(); 
    recp.Add(new Recipient()); 
    recp[0].Name = "VTest"; 
    recp[0].eMail = "[email protected]"; 
    recp.Add(new Recipient()); 
    recp[1].Name = "GTest"; 
    recp[1].eMail = "[email protected]"; 

    return this.View(recp); 
} 

EditorTemplate:

@model Recipient 
    <div class="row"> 
     <div class="col-md-4"> 
      <div class="row"> 
       <div class="col-xs-12 custom-label-left-condensed"> 
        @Html.LabelFor(model => Model.Name) 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-xs-12"> 
        @Html.TextBoxFor(model => Model.Name) 
       </div> 
      </div> 
     </div> 
     <div class="col-md-4"> 
      <div class="row"> 
       <div class="col-xs-12 custom-label-left-condensed"> 
        @Html.LabelFor(model => Model.eMail) 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-xs-12"> 
        @Html.EditorFor(model => Model.eMail, new { htmlAttributes = new { @class = "emailField" } }) 
       </div> 
      </div> 
     </div> 
    </div> 

查看:

@model List<Recipient> 

<div class="panel panel-default"> 
    <div class="panel-heading hidden-xs"> 
     <h4>@ViewBag.Title</h4> 
    </div> 

    @using (Html.BeginForm()) 
    { 
     <div class="container-fluid panel-body"> 
      <div id="myData"> 
       @if (Model != null) 
       { 
        for (int i = 0; i < Model.Count(); i++) 
        { 
         Html.EditorFor(m => Model[i], "Recipient", "Recipient[" + i + "]"); 
         //Html.RenderPartial("EditorTemplates/Recipient", Model[i]); 
        } 
       } 
      </div> 
      <div class="row"> 
       <div class="col-xs-4 col-md-3 text-right"> 
        <input id="cmdSubmit" type="submit" value="Create" class="btn btn-default btn-sm" /> 
       </div> 
      </div> 
     </div> 
    } 
</div> 
+0

是吧'Recipient'或'Recipients'?你在你的代碼中使用了兩個,但是這兩個完全不同的類名。 –

+0

在模型下我定義了收件人,單數,然後複數作爲收件人:列表。該視圖使用複數和模型for循環,並在for循環中,我稱EditorTemplate爲單數。 – VG1

+0

我明白了。但這實際上並不是一個好主意。它不僅會讓你的代碼更難閱讀,而且會造成一個失敗點。您多久會在Visual Studio中使用錯誤的自動補全?我會經常想象。另外,它在像C#這樣的強類型語言中非常重要,可以知道你正在處理的是哪種類型的集合。 '收件人'可以是'List ','ICollection ','IEnumerable ','Recipient []'等等中的任何一個。不得不深入研究這個類來確定代碼味道。 –

回答

0

使用

List<recp> recps = new List<Recipients>(); 
recp orecp = new recp(); 

orecp.Name = "VTest"; 
orecp.eMail = "[email protected]"; 
recps.add(orecp); 

orecp = new recp(); 
orecp.Name = "GTest"; 
orecp.eMail = "[email protected]"; 
recps.add(orecp); 

return this.View(recps); 
+0

謝謝埃米爾,我已經更新了我的控制器,但這沒有什麼區別。收件人絕對是人口稠密的。當我正在調試並在「@ Html.TextBoxFor(model => Model.Name)」中找到斷點時,這個名字對兩個記錄都顯示正常。然而,沒有任何東西呈現給頁面。 – VG1