Rumah >pembangunan bahagian belakang >C++ >Mengapa borang MVC saya gagal menyiarkan senarai objek, menyebabkan senarai nol dalam pengawal?

Mengapa borang MVC saya gagal menyiarkan senarai objek, menyebabkan senarai nol dalam pengawal?

Barbara Streisand
Barbara Streisandasal
2025-01-21 14:36:10547semak imbas

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

Borang MVC tidak boleh menyerahkan senarai objek

Dalam aplikasi MVC, pengguna menghadapi masalah: borang yang mengandungi senarai objek tidak dapat menyerahkan data kepada pengawal, menyebabkan senarai kosong diluluskan. Borang menggunakan gelung dan pandangan separa untuk membuat item, tetapi selepas penyerahan pengawal menerima enum kosong.

Analisis Masalah

Untuk memahami sebab data tidak diserahkan dengan betul, mari kita periksa kod yang disediakan:

Pandangan ibu bapa:

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

Paparan Separa (_partialView):

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

Kelas PlanCompareViewModel:

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

Penyelesaian

Punca masalah terletak pada cara unsur bentuk dinamakan. Tanpa indeks, pengikat model tidak dapat membezakan antara unsur-unsur senarai. Untuk membetulkannya, kita perlu menetapkan indeks yang betul kepada nama elemen borang:

Paparan separa yang dipertingkatkan (_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>

Pengubahsuaian ini membolehkan pengikat model mengaitkan elemen data individu dengan item senarai yang betul.

Tingkatkan penjanaan borang menggunakan templat editor

Untuk menjadi lebih ringkas dan cekap, adalah disyorkan untuk menggunakan templat editor. Sebahagian daripada paparan boleh digantikan dengan kandungan berikut dengan mencipta PlanCompareViewModel.cshtml dalam folder EditorTemplates:

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

Akhir sekali, paparan induk boleh dipermudahkan kepada:

<code class="language-csharp">@Html.EditorForModel()</code>

Templat editor secara automatik mengendalikan pengindeksan untuk memastikan elemen borang dinamakan dengan betul untuk pengikatan model.

Atas ialah kandungan terperinci Mengapa borang MVC saya gagal menyiarkan senarai objek, menyebabkan senarai nol dalam pengawal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn