Jak svázat vybrané hodnoty z dropdownlists v dynamicky generované tabulky? ASP.NET Základní MVC

0

Otázka

V mém ASP.NET Základní MVC projektu je tabulka se dvěma sloupci obsahující dropdownlists, kde uživatel má vybrat sazeb hodnoty a klepněte na tlačítko uložit, aby je aktualizovat pro každý řádek v tabulce. Existují desítky dynamicky generované řádky celkem, což má za následek dvakrát tolik dropdownlists s hodnotami na trať.

Znovu, cílem je aktualizovat každý řádek s hodnotami vybraných ve dvou dropdownlists v daném řádku.

Byl jsem schopen vytvořit tabulky a zobrazení hodnot. Tam je smyčka, která generuje každý řádek v tabulce. Problém mám, je, že nevím jak předat všechny hodnoty ze všech dropdownlists zpět do regulátoru spolu s rownumbers tak já můžu napsat logiku aktualizace hodnot v databázi. Můžu předat jednu rozbalovací kombinace z první řady a já nevím, jak udělat to stejné pro všechny z nich, nebo uvést, které řadě jsou od. Skutečnost, že dropdownlists jsou ve smyčce, je to obtížné.

Toto je část pohledu, kde jsem se zobrazí tabulka:

      <tbody>
      @foreach (var item in Model.WorksheetRates)
      {
      var recordNumber = PagedContext.Page * PagedContext.PageSize + Model.WorksheetRates.IndexOf(item) + 1;
      <tr>
           <td>@recordNumber</td>
           <td>
               @item.Program
           </td>
           <td>
               @item.Area
           </td>
            <td>
                @Html.DropDownListFor(x => x.GARateID, gaRatesList, new { @style = "width:280px;" })
            </td>
             <td>
                 @Html.DropDownListFor(x => x.OverheadRateID, overheadRatesList, new { @style = "width:280px;" })
             </td>
         </tr>
      }
                        </tbody>

To je model:

public class BudgetPrepViewModel
{
    public List<WorksheetRate> WorksheetRates { get; set; }

    public int GARateID { get; set; }
    public int OverheadRateID { get; set; }

    public IEnumerable<SelectListItem> GARateList { get; set; }
    public IEnumerable<SelectListItem> OverheadRateList { get; set; }
}

Jak můžete vidět, přidal jsem IEnumerable<SelectListItem> objekt, protože jsem si myslel, že by bylo třeba použít a opakoval v regulátoru. To je asi, já nevím, jak vázat se na ně. A to je důležité, já se s nimi spojit s správné řadě.

To je to, co jsem přišel s správce pro záhlaví, aktuální kód uvnitř, není relevantní pro otázku:

[HttpPost, ActionName("SelectRates")]
public IActionResult SelectRates([Bind("GARateID, OverheadRateID")] BudgetPrepViewModel data)
{
        BPViewModel model = new BPViewModel
        {
            MonthNameList = MonthSelectList(),
            PrepStep = 8
        };

       return View("Index", model);
}

Jakýkoliv pomoci chtěl bych být ocenil. Prosím, dejte mi vědět, pokud něco není jasné, jsem udělal můj nejlepší, aby popsal tuto otázku. Děkuji!!!

1

Nejlepší odpověď

2

Za prvé, předpokládám, že WorksheetRateGARateIDa OverheadRateID jako vlastnosti, protože jsou ve stejném řádku tabulky. Za druhé, jsem přidal vlastnost Id na WorksheetRate tak, že vybrané možnosti by mohly být identifikovány, pokud je předložen formulář. Řekl, že nyní jsou kurzy, jako je tento:

public class WorksheetRate
{
    public int Id { get; set; }
    public string Program { get; set; }
    public string Area { get; set; }
    public int GARateID { get; set; }
    public int OverheadRateID { get; set; }
}
public class BudgetPrepViewModel
{
    public List<WorksheetRate> WorksheetRates { get; set; }

    public IEnumerable<SelectListItem> GARateList { get; set; }
    public IEnumerable<SelectListItem> OverheadRateList { get; set; }
}

Klíčovým aspektem zde je, že jméno vybere a vstupy musí následovat vzor tak, že ASP.NET vázat to na model. Pro tento případ, vázat hodnoty majetku GARateID z BudgetPrepViewModel.WorksheetRates jméno vybere a vstupy musí být:

  • vybere:
    • <select name="WorksheetRates[0].GARateID">
    • <select name="WorksheetRates[1].GARateID">
  • vstupy
    • <input hidden name="WorksheetRates[0].Id" />
    • <input hidden name="WorksheetRates[1].Id" />

Proto, řešení je:

@for (var i=0; i<Model.WorksheetRates.Count(); i++)
{
    <tr>
        <td>
            @Model.WorksheetRates[i].Id
            <input hidden asp-for="WorksheetRates[i].Id" /> 
        </td>
        <td>
            @Model.WorksheetRates[i].Program
        </td>
        <td>
            @Model.WorksheetRates[i].Area
        </td>
        <td>
            @Html.DropDownListFor(x => x.WorksheetRates[i].GARateID, Model.GARateList, new { @style = "width:280px;" })
        </td>
        <td>
            @Html.DropDownListFor(x => x.WorksheetRates[i].OverheadRateID, Model.OverheadRateList, new { @style = "width:280px;" })
        </td>
    </tr>
}

Jsem si vytvořil úložiště s plnou pracovní roztok.

2021-11-21 17:16:04

Děkuji moc za vaši odpověď. Budu potřebovat nějaký čas jít přes odpovíte a já se vrátím k vám.
user1179071

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................