Pertanyaan ini memiliki jawaban di StackOverflow di sini, tetapi sudah berakhir 5 tahun dan saya tidak yakin itu cara terbaik atau satu-satunya, terutama karena saya sudah memiliki objek tipe Kamus - daftar

Saya memiliki ViewModel:

public class SummaryList
{
    public List<Summary> Summaries { get; set; }
    public IEnumerable<SelectListItem> Managers { get; set; }

    public SummaryList()
    {
        Managers = new DAL.GetManagersAsSelectListItem();
    }
}

Model Summary terlihat seperti ini:

[Key]
public int Id { get; set; }
... OtherProperties ...
public int ManagerId { get; set; }
public IEnumerable<SelectListItem> Managers { get; set; }

Pada halaman di mana pengguna dapat mengedit ViewModel ini, yang menunjukkan seluruh objek List dari Summary, saya dapat melakukan ini:

@model MyProject.ViewModels.SummaryList

@using (Html.BeginForm("SummaryListSave", "Controller", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    if (Model != null)
    {
        if (Model.Summaries.Count > 0)
        {
          <table>
            <thead>...</thead>

            <tbody>
                @for (int i = 0; i < Model.Summaries.Count; i++)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(m => m.Summaries[i].WhateverProperty)
                        </td>
                        <td>
                            @Html.DropDownListFor(m => m.Summaries[i].ManagerId, Model.Managers)
                        </td>
                    </tr>
                 }
             </tbody>

           </table>
         }
     }
 }

Yaitu saya dapat menampilkan DropDownList untuk setiap baris yang mengambil ManagerId dan karena saya memberikan IEnumerable Managers itu melakukan pengikatan dua arah saya untuk opsi ddl dan untuk menyimpan hasil edit.

Saya ingin melakukan hal yang sama seperti ini tetapi hanya MENAMPILKAN nilainya, jadi tidak menggunakan DropDownList, alih-alih menunjukkan ManagerId Saya ingin nilai masing-masing dari SelectListItem

Apakah tidak ada mekanisme di Html pembantu untuk melakukan ini, menggunakan SelectListItem saya yang sudah ada/diisi? Saya mencoba DisplayTextFor dan beberapa lainnya tetapi belum berhasil.

Jika tidak ada, apa cara termudah untuk mengimplementasikan sesuatu menggunakan Enumerable

Ide pertama saya adalah membungkus parameter pada baris @Html.DisplayFor(m => m.OutbreakSummaries[i].WeeklyMeetingLeadId), yang akan memberikan Id, dalam fungsi yang mendapatkan nilai dari Model.Managers tetapi saya tidak tahu di mana untuk memulai dengan sintaks.

0
jamheadart 9 April 2020, 14:03

1 menjawab

Jawaban Terbaik

Saya tidak 100% yakin saya mengerti, tetapi apakah Anda mencoba menggunakan (SelectList) di Tampilan Anda, dan juga menunjukkan properti Nilai dan Teks saat membuat SelectList di pengontrol? seperti ini:

Tampilan:

@Html.DropDownListFor(m => m.Summaries[i].ManagerId, (SelectList) Model.Managers)

Pengontrol:

Model.Managers = new SelectList(new DAL.GetManagersAsSelectListItem(), "ManagerID", "Description");

Ganti Deskripsi dengan nama properti asli di dalam Manager VM (untuk Teks) Ketika ini dikonfigurasi seperti ini, DropDownList harus menunjukkan Teks dan bukan Nilai (id).

1
JCIsola 9 April 2020, 14:20