我有一个部分观点:
@model BasicFinanceUI.Models.TransactionLine
<div class="form-group">
<label for="cmbCategory0" class="col-lg-1 control-label">Category:</label>
<div class="col-lg-3">
@Html.DropDownListFor(x => x.CategoryId,
new SelectList(Model.References.Categories, "Value", "Text", Model.CategoryId), "Select one",
new { @onchange = "populateSubCategory(0)", @class = "cmbCategory form-control" })
</div>
</div>
此部分视图从List&lt;&gt;加载我主视图中的对象:
@foreach (var line in Model.Transaction.TransactionLines)
{
@Html.Partial("_TransactionLine", line)
}
使用正确的数据加载部分视图。
但是当我想保存数据时 - 我的列表似乎有一行,但行中没有数据。我是部分视图的新手,但似乎MVC没有将部分视图数据映射到List&lt;&gt;这创建了部分视图列表。
我做错了吗?
在控制器中,当我尝试将数据读入我的对象以将它们发送回数据库时,我这样做:
item.TransactionLines = new List<TransactionLineDto>();
foreach (var line in model.Transaction.TransactionLines)
{
item.TransactionLines.Add(new TransactionLineDto
{
Id = line.Id,
CostCentreId = line.CostCentreId,
SubCategoryId = line.SubCategoryId,
TransactionId = model.Transaction.Id,
Amount = line.Amount
});
}
但是,我发现所有值都是0.看来局部视图不会将数据返回给View的模型。这是预期的行为,还是我做错了什么?
我试过'Partial'和'RenderPartial'。不确定为什么是正确的,因为它们都会导致同样的问题。
答案 0 :(得分:0)
如果您检查HTML,您会看到部分内部下拉列表的名称属性为CategoryId
。这是错误的,因为它应该像Transaction.TransactionLines[0].CategoryId
。否则,ASP.NET MVC将无法将值正确映射到模型。解决此问题的最简单方法是使用for循环并在主视图中移动部分视图HTML。
for (int i = 0; i < model.Transaction.TransactionLines.Count; i++)
{
<div class="form-group">
<label for="cmbCategory0" class="col-lg-1 control-label">Category:</label>
<div class="col-lg-3">
@Html.DropDownListFor(x => x.Transaction.TransactionLines[i].CategoryId,
new SelectList(x.Transaction.TransactionLines[i].References.Categories, "Value", "Text", x.Transaction.TransactionLines[i].CategoryId), "Select one",
new { @onchange = "populateSubCategory(0)", @class = "cmbCategory form-control" })
</div>
</div>
}