![](/img/trans.png)
[英]ViewModel complex objects returning null when passed from view to controller
[英]View model with complex type is null when passed to controller
我試圖將復雜類型的視圖模型傳遞給我的控制器。 我已經研究過所有關於這個主題的自上而下的內容,我仍然感到困惑。
問題:
單擊我的提交按鈕時,將傳入視圖模型,但是MacroInfo列表屬性為null。
UpdateIndexViewModel
public class UpdateIndexViewModel
{
//This view model will become larger later
public List<MacroInfo> MacrosToUpdate { get; set; }
}
MacroInfo
public class MacroInfo
{
public bool IsSelected { get; set; }
public string FullPath { get; set; }
public string Id { get; set; }
public DateTime CreatedAt { get; set; }
}
控制器動作
[HttpPost]
public ActionResult Submit(UpdateIndexViewModel updateIndexViewModel)
{
//updateIndexViewModel.MacrosToUpdate is null ??
}
索引視圖
@model EplanInterface.Core.ViewModels.UpdateIndexViewModel
@using (Html.BeginForm("Submit", "Update", FormMethod.Post))
{
<table style="width:100%" , class="table-bordered">
<thead>
<tr>
<th>#</th>
<th>Macro Path</th>
<th>Created At</th>
<th>Update</th>
</tr>
</thead>
@for (int i = 1; i < Model.MacrosToUpdate.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m =>Model.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => Model.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => Model.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
</table>
<input type="submit" class="btn btn-primary" value="Submit"/>
}
我試過了什么
我嘗試將傳入的控制器動作屬性更改為List<MacroInfo> macrosToUpdate
,但在執行此操作時,該屬性仍為null。
Chrome網絡檢查
最后的評論
我不確定是否需要使用AJAX帖子來執行此操作,或者我的變量名稱是否格式不正確。 我很確定這是一個具有約束力的問題,我不理解。
如果有人能指出我正確的方向,我會非常感激。
這部分模板有點不對勁。
@for (int i = 1; i < Model.MacrosToUpdate.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m =>Model.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => Model.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => Model.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
請更改以下內容,然后重試。
@for (int i = 0; i < Model.MacrosToUpdate.Count;
{
<tr>
<td>@i</td>
<td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => b.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
首先,你用1開始循環,這是根本原因。 由於缺少第0個索引,模型綁定器無法正確綁定列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.