私は MVC 3、Razor ビュー、および EditorFor テンプレートを使用しています。
私は3つの単純なネストされたモデルを持っています:-
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 インデックスの name 属性と 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>
ディクショナリに渡されたモデル アイテムのタイプは System.Collections.ObjectModel.Collection [BillingRateRowViewModel] ですが、このディクショナリには BillingRateRowViewModel のタイプが必要です。
誰でもこれに光を当てることができますか?