首頁 > 後端開發 > C++ > 為什麼我的 MVC 表單無法發佈物件列表,導致控制器中出現空白列表?

為什麼我的 MVC 表單無法發佈物件列表,導致控制器中出現空白列表?

Barbara Streisand
發布: 2025-01-21 14:36:10
原創
500 人瀏覽過

Why is my MVC form failing to post a list of objects, resulting in a null list in the controller?

MVC表單無法提交物件清單

在MVC應用程式中,使用者遇到一個問題:包含物件清單的表單無法將資料提交到控制器,導致傳遞的是空列表。該表單使用循環和部分視圖來呈現項目,但在提交後,控制器接收的是一個空枚舉。

問題分析

為了理解為什麼資料沒有正確提交,讓我們檢查提供的程式碼:

父視圖:

<code class="language-csharp">@foreach (var planVM in Model)
{
    @Html.Partial("_partialView", planVM)
}</code>
登入後複製

部分視圖 (_partialView):

<code class="language-csharp">@Html.HiddenFor(p => p.PlanID)
@Html.HiddenFor(p => p.CurrentPlan)
@Html.CheckBoxFor(p => p.ShouldCompare)</code>
登入後複製

PlanCompareViewModel 類別:

<code class="language-csharp">public class PlansCompareViewModel
{
    public int PlanID { get; set; }
    public Plan CurrentPlan { get; set; }
    public bool ShouldCompare { get; set; }
}</code>
登入後複製

解決方案

問題的根本原因在於表單元素的命名方式。如果沒有索引,模型綁定器無法區分清單的元素。為了解決這個問題,我們需要為表單元素的名稱分配正確的索引:

改進後的部分視圖 (_partialView):

<code class="language-csharp">@for (int i = 0; i < Model.Count(); i++)
{
    @Html.HiddenFor(p => p[i].PlanID)
    @Html.HiddenFor(p => p[i].CurrentPlan)
    @Html.CheckBoxFor(p => p[i].ShouldCompare)
}</code>
登入後複製

此修改允許模型綁定器將各個資料元素與正確的列表項目關聯起來。

使用編輯器範本改進表單產生

為了更簡潔高效,建議使用編輯器範本。透過在EditorTemplates資料夾中建立PlanCompareViewModel.cshtml,部分視圖可以用以下內容取代:

<code class="language-csharp"><div>
    @Html.HiddenFor(p => p.PlanID)
    @Html.HiddenFor(p => p.CurrentPlan)
    @Html.CheckBoxFor(p => p.ShouldCompare)
</div></code>
登入後複製

最後,父視圖可以簡化為:

<code class="language-csharp">@Html.EditorForModel()</code>
登入後複製

編輯器範本會自動處理索引,確保表單元素的名稱正確,以便進行模型綁定。

以上是為什麼我的 MVC 表單無法發佈物件列表,導致控制器中出現空白列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板