[英]c# mvc model binding nested lists
我的模型綁定有問題。 在這里獲得以下型號:
public class RoomScan
{
public RoomScan() { }
public RoomScan(Guid id)
{
Room_ID = id;
Assets = new List<AssetScanModel>();
}
//public Guid Soll_ID { get; set; }
public Guid Room_ID { get; set; }
public List<AssetScanModel> Assets { get; set; }
[Display(Name = "Barcode", ResourceType = typeof(Dictionary))]
public string Barcode { get; set; }
[Display(Name = "RFID", ResourceType = typeof(Dictionary))]
public string RFID { get; set; }
}
public class AssetScanModel
{
public AssetScanModel(Asset asset)
{
Asset = asset;
Scanned = false;
CheckIn = false;
}
public Asset Asset { get; set; }
[Display(Name = "Scanned", ResourceType = typeof(Dictionary))]
public bool Scanned { get; set; }
[Display(Name = "CheckIn", ResourceType = typeof(Dictionary))]
public bool CheckIn { get; set; }
}
該視圖確實列出了所有資產:
using (Html.BeginForm("Scan", "Inventory", FormMethod.Post))
{
Html.HiddenFor(rs => rs.Room_ID);
Html.HiddenFor(rs => rs.Assets);
<div>
<div class="editor-label">Barcode</div>
<div class="editor-field"><input type="text" name="Barcode" value="@Model.Barcode" /></div>
</div>
<div>
<div class="editor-label">RFID</div>
<div class="editor-field"><input type="text" name="Barcode" value="@Model.RFID" /></div>
</div><br />
...
@for (int i = 0; i < Model.Assets.Count; i++)
{
<tr>
<td>@Html.DisplayFor(asm => asm.Assets[i].Asset.InventoryNumber)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].Asset.Description)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].Asset.Manufacturer)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].Asset.Model)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].Asset.SerialNumber)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].Scanned)</td>
<td>@Html.DisplayFor(asm => asm.Assets[i].CheckIn)</td>
</tr>
}
我添加了“ Asset [i]”,因為我在某處讀到它有助於默認模型綁定器正確綁定(didn#t工作)
我的問題是:在我的控制器中:
[HttpPost]
public ActionResult Scan(RoomScan toVerify)
列表為空(不為null)。 我知道這與模型聯編程序有關,但是我不熟悉如何對其進行更改以使其起作用。
嘗試使用DisplayTemplates / EditorTemplates,為您的嵌套模型類型創建模板。 在視圖中寫道:
@Html.DisplayFor(asm => asm.Assets)
在DisplayTemplate(AssetScanModel.cshtml)中:
@model AssetScanModel
<tr>
<td>@Html.DisplayFor(asm => asm.Asset.InventoryNumber)</td>
<td>@Html.DisplayFor(asm => asm.Asset.Description)</td>
<td>@Html.DisplayFor(asm => asm.Asset.Manufacturer)</td>
<td>@Html.DisplayFor(asm => asm.Asset.Model)</td>
<td>@Html.DisplayFor(asm => asm.Asset.SerialNumber)</td>
<td>@Html.DisplayFor(asm => asm.Scanned)</td>
<td>@Html.DisplayFor(asm => asm.CheckIn)</td>
</tr>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.