簡體   English   中英

傳遞給控制器​​時,具有復雜類型的視圖模型為null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM