Я думаю, что я прочитал каждое сообщение о 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>
Это '' Recipient' или Recipients'? Вы используете оба кода, но это два совершенно разных имени класса. –
В моделях, которые я определил получателя, единственного числа, а затем множественного числа в качестве получателей: Список. В представлении используется множественное число и модель для цикла, а внутри цикла for я вызываю EditorTemplate, который является единственным. –
VG1
Я вижу. Однако на самом деле это не очень хорошая идея. Это не только делает ваш код более трудным для чтения, но также создает точку отказа. Как часто вы собираетесь автозаполнять с неправильным в Visual Studio? Я бы представлял себе довольно часто. Кроме того, на самом деле очень важно на строго типизированном языке, таком как C#, чтобы узнать, что * kind * от коллекции, с которой вы имеете дело. 'Recipients' может быть любым из' List ',' ICollection ',' IEnumerable ',' Получатель [] 'и т. Д. Необходимость копаться в классе, чтобы понять, что это запах кода. –