我正在使用 MVC 3、Razor 视图和 EditorFor 模板。
我有三个简单的嵌套模型:-
public class BillingMatrixViewModel
{
public ICollection<BillingRateRowViewModel> BillingRateRows { get; set; }
public BillingMatrixViewModel()
{
BillingRateRows = new Collection<BillingRateRowViewModel>();
}
}
public class BillingRateRowViewModel
{
public ICollection<BillingRate> BillingRates { get; set; }
public BillingRateRowViewModel()
{
BillingRates = new Collection<BillingRate>();
}
}
public class BillingRate
{
public int Id { get; set; }
public int Rate { get; set; }
}
BillingMatrixViewModel 有一个视图:-
@using System.Collections
@using WIP_Data_Migration.Models.ViewModels
@model WIP_Data_Migration.Models.ViewModels.BillingMatrixViewModel
<table class="matrix" id="matrix">
<tbody>
<tr>
@Html.EditorFor(model => Model.BillingRateRows, "BillingRateRow")
</tr>
</tbody>
</table>
BillingRateRow 有一个名为 BillingRateRow 的编辑器模板:-
@using System.Collections
@model IEnumerable<WIP_Data_Migration.Models.ViewModels.BillingRateRowViewModel>
@foreach (var item in Model)
{
<tr>
<td>
@item.BillingRates.First().LabourClass.Name
</td>
@Html.EditorFor(m => item.BillingRates)
</tr>
}
BillingRate 有一个编辑器模板:-
@model WIP_Data_Migration.Models.BillingRate
<td>
@Html.TextBoxFor(model => model.Rate,
new {style = "width: 20px"})
</td>
为每个输入生成的标记是:-
<input name="BillingMatrix.BillingRateRows.item.BillingRates[0].Rate" id="BillingMatrix_BillingRateRows_item_BillingRates_0__Rate" style="width: 20px;" type="text" value="0"/>
请注意,BillingRate 索引的名称和 ID 属性处理得很好,但 BillingRateRows 没有索引,而是“.item”。从我的研究来看,这是因为由于 foreach 循环,上下文已经被拉出,所以循环不应该是必要的。
我想实现:-
<input name="BillingMatrix.BillingRateRows[0].BillingRates[0].Rate" id="BillingMatrix_BillingRateRows_0_BillingRates_0__Rate" style="width: 20px;" type="text" value="0"/>
如果我将 BillingRateRow 视图更改为:-
@model WIP_Data_Migration.Models.ViewModels.BillingRateRowViewModel
<tr>
@Html.EditorFor(m => Model.BillingRates)
</tr>
它将抛出 InvalidOperationException,'传入字典的模型项是 System.Collections.ObjectModel.Collection [BillingRateRowViewModel] 类型,但此字典需要 BillingRateRowViewModel 类型。
任何人都可以对此有所了解吗?