2016-10-03 3 views
1

Я думаю, что я прочитал каждое сообщение о SO об этом, но до сих пор не знаю, почему следующий настраиваемый шаблон шаблона, строго типизированный для модели, вообще не отображается. Он определенно выполняет редактор шаблонов Recipient.cshtml, потому что я поставил точку останова на строку TextboxFor, и эта строка дважды ударяется один раз для каждого имени получателя, установленного в контроллере, но когда это будет сделано, отображение страницы пуст для элементы модели (кнопка отправки на главной странице все еще отображается). Если я раскомментирую строку RenderPartial и закомментирую редактор, то получатели будут отображаться просто отлично, но, конечно, идентификаторы неправильно перечислены, поэтому я не могу публиковать сообщения. Насколько я понимаю, я должен использовать шаблон редактора, чтобы идентификаторы могли правильно перечислить и разрешить публикацию модели получателей.Сильно типизированный редактор Шаблон не отображается

Может ли кто-нибудь увидеть, что я могу сделать неправильно, или предложить альтернативный способ визуализации этого списка с правильными идентификаторами?

Спасибо!

Модели:

[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 я вызываю EditorTemplate, который является единственным. – VG1

+0

Я вижу. Однако на самом деле это не очень хорошая идея. Это не только делает ваш код более трудным для чтения, но также создает точку отказа. Как часто вы собираетесь автозаполнять с неправильным в Visual Studio? Я бы представлял себе довольно часто. Кроме того, на самом деле очень важно на строго типизированном языке, таком как C#, чтобы узнать, что * kind * от коллекции, с которой вы имеете дело. 'Recipients' может быть любым из' List ',' ICollection ',' IEnumerable ',' Получатель [] 'и т. Д. Необходимость копаться в классе, чтобы понять, что это запах кода. –

ответ

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

Спасибо Emil, я обновил свой контроллер, но это не имело значения. Получатели определенно населены. Когда я отлаживаю и ударяю точку останова в «@ Html.TextBoxFor (model => Model.Name)», имя отображается как раз для обеих записей. Однако на страницу ничего не отображается. – VG1

 Смежные вопросы

  • Нет связанных вопросов^_^