拉开我的声音。
我有一个模型,其中包含一个项目列表。这是"成本"
在它的编辑视图中,我使用for循环通过编辑器模板显示项目。
我添加了一个附加新链接的链接,确保生成的ID和名称跟随其他人。 即 ID = Costs_N__PropertyName 名称=成本[N] .PropertyName
该链接调用一个动作,该动作返回sam EditorTemplate但具有客户名称&如上所述。将按预期显示一个新的空行,我可以对其进行编辑。 但是,当我尝试保存时,我可以看到它没有绑定到模型。
我无法相信这让我如此悲伤,我想象这是一个普遍的地方。
我猜我错过了一些明显但我看不见的东西......
简而言之,它似乎都在工作,但附加项目不会受到主要模型成本列表的约束。 请帮助....下面的代码。
编辑视图部分
<div class="form-group">
<div class="col-md-6 col-lg-offset-1">
<table id="tblCosts" class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.Costs[0].ValidFrom)</th>
<th>@Html.DisplayNameFor(model => model.Costs[0].ValidTo)</th>
<th>@Html.DisplayNameFor(model => model.Costs[0].InternalCost)</th>
</tr>
</thead>
<tbody id="editorRows">
@{
for (int i = 0; i < Model.Costs.Count; i++)
{
@Html.EditorFor(m => Model.Costs[i]);
}
}
</tbody>
</table>
</div>
</div>
JQuery调用动作添加新行......
$("#addItem").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) {
alert(html);
$("#editorRows").append(html);
}
});
添加新
的行动public PartialViewResult BlankCostRow( int tmpId )
{
var itemModel = new ECodeLevel2CostViewModel();
itemModel.Id = tmpId;
return this.PartialView("~/Views/Shared/EditorTemplates/ECodeLevel2CostViewModel.cshtml", itemModel);
}
编辑模板......
@if (Model.Id >= 0)
{
<tr>
<td>
@Html.HiddenFor(model => model.UniqueId)
@Html.HiddenFor(model => model.Id)
@Html.EditorFor(model => model.ValidFrom)
</td>
<td>
@Html.EditorFor(model => model.ValidTo)
</td>
<td>
@Html.EditorFor(model => model.InternalCost)
</td>
</tr>
}
else
{
Layout = "";
string prefix = "Costs";
string idPreifx = String.Format("{0}_{1}__", prefix, -Model.Id);
string namePreifx = String.Format("{0}[{1}].", prefix, -Model.Id);
<tr>
<td>
@Html.Hidden(@namePreifx + "UniqueId", Model.UniqueId, new { name = @namePreifx + "UniqueId" })
@Html.Hidden(@namePreifx + "Id", Model.Id, new { name = @namePreifx + "Id" })
@Html.TextBox(@namePreifx + "ValidFrom", Model.ValidFrom, new { name = @namePreifx + "ValidFrom" })
</td>
<td>
@Html.TextBox(@namePreifx + "ValidTo", Model.ValidTo, new { name = @namePreifx + "ValidTo" })
</td>
<td>
@Html.TextBox(@namePreifx + "InternalCost", Model.InternalCost, new { name = @namePreifx + "InternalCost" })
</td>
</tr>
}