我想我已经阅读了有关此内容的所有帖子,但仍然不知道为什么以下自定义编辑器模板(强烈输入模型)根本不显示。它肯定正在执行 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 = "vgtest@test.com";
recp.Add(new Recipient());
recp[1].Name = "GTest";
recp[1].eMail = "vgtest2@test.com";
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>
1 回答
使用