我认为通过显示一些代码并进行解释可能更容易解释:
创建产品视图模型:
[UIHint("Prices")]
public IList<CreatePricesViewModel> Prices { get; set; }
有了这个,我希望能够使用 ajax 调用为产品添加另一组不同货币的价格。
创建价格 ViewModel:
[DataType(DataType.Currency)]
[DisplayName("Wholesale Price: ")]
public decimal Wholesale { get; set; }
[DataType(DataType.Currency)]
[Required]
[DisplayName("Retail Price: ")]
public decimal Retail { get; set; }
[DataType(DataType.Currency)]
[DisplayName("Discounted Price: ")]
public decimal Discount { get; set; }
在我的控制器中,我创建了一个 CreatePricesViewModel 并将其添加到 CreatePricesViewModel 的 CreateProductViewModels 列表中,因此至少有一个可用的实例可以在视图中呈现。
创建产品视图:
@model CumbriaMD.Infrastructure.ViewModels.ProductViewModels.CreateProductViewModel
......
<div class="editor-field">
@Html.EditorFor(model => model.Prices)
@Html.ValidationMessageFor(model => model.Prices)
</div>
价格编辑器模板:
这是我真正挣扎的地方。当我对 CreatePricesViewModel 进行强类型输入时,我会收到投诉,因为我传入的是 CreatePricesViewModel 类型的 IEnumerable 而不是单个实例 - 但是当我使用 foreach 循环时,我的 id 和名称被弄乱了,所以模型绑定失败了?可以在这里使用@inherits 帮助吗?
@model CumbriaMD.Infrastructure.ViewModels.PriceViewModels.CreatePricesViewModel
<div class="editor-label">
@Html.LabelFor(model => model.Wholesale)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Wholesale)
@Html.ValidationMessageFor(model => model.Wholesale)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Retail)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Retail)
@Html.ValidationMessageFor(model => model.Retail)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Discount)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Discount)
@Html.ValidationMessageFor(model => model.Discount)
</div>