Problema su model con tipo Enum

di il
3 risposte

Problema su model con tipo Enum

Ciao,

ho un problema con un enum. Se dalla GUI cambio il valore nel controller non mi arriva.

Model 

 public enum GameProviderLoad
  {
       AA,
       BB,
       CC
  }
  public class GamesListViewModel
   {
      
       public GameProviderLoad GameProviderLoad { get; set; }
       public IEnumerable<SelectListItem> GameProviderList
       {
           get
           {
               var priorityType = typeof(GameProviderLoad);
               var priorityValues = Enum.GetValues(priorityType).Cast<GameProviderLoad>();
               var converter = TypeDescriptor.GetConverter(priorityType);
               return
                   from priorityValue in priorityValues
                   select new SelectListItem
                   {
                       Text = converter.ConvertToString(priorityValue),
                       Value = priorityValue.ToString(),
                   };
           }
       }
   }

Controller

      [HttpGet("administrator/games/fetch")]
       public async Task<IActionResult> FetchGames(GamesListViewModel model)
       {
           switch (model.GameProviderLoad)
           {
               case GameProviderLoad.AA:
                   await AAService.FetchAndUpdateGamesAsync();
                   break;
               case GameProviderLoad.BB:
                   await BBService.FetchAndUpdateGamesAsync();
                   break;
               case GameProviderLoad.CC:
                   await CCntegrationService.PragmaticLobby.FetchAndUpdateGamesAsync();
                   break;
           }
           
           return View("~/Views/Administrator/Games/GamesList.cshtml", new GamesListViewModel { Games = await Game.GetAllAsync() });
       }

View

<div class="page-header">
   <h2>@_s("Stored Games")</h2>
   <div class="text-center pt-4">
       @Html.DropDownListFor(m => m.GameProviderLoad, Model.GameProviderList, @_s("Please select the provider"))
   </div>
   <div class="text-center pt-4">
       <a class="btn btn-primary" href="/administrator/games/fetch">
           <em class="fas fa-cloud-download-alt"></em>
           @_s("Fetch Games")
       </a>
       <button class="btn btn-success" type="submit" form="game-order-form">@_s("Save Order")</button>
   </div>
</div>

GameProviderLoad rimane fisso a AA.

Grazie per il prezioso aiuto.
Simone

3 Risposte

  • Re: Problema su model con tipo Enum

    26/01/2023 - sspagnamn76 ha scritto:


    ho un problema con un enum. Se dalla GUI cambio il valore nel controller non mi arriva.

    Non so se è il reale problema, ma mi pare di ricordare che gli elementi della lista vadano rappresentati creando una SelectList.

    La creazione degli elementi come SelectListItem credo sia corretta, ma invece che usare il tipo IEnumerable<SelectListItem>, prova a inserirli nella suddetta SelectList, che possiede anche altre proprietà (ad esempio, DataValueField e DataTextField, che segnalano i nomi delle proprietà dalle quali estrarre il valore della chiave e il testo da usare come descrizione dell'opzione).

    Ciao! :)

  • Re: Problema su model con tipo Enum

    Ciao,

    ho cambiato il codice come da te suggerito.
    Come faccio nel controller a leggere il valore impostato nella GUI?

    Grazie,
    Simo

  • Re: Problema su model con tipo Enum

    26/01/2023 - sspagnamn76 ha scritto:


    Come faccio nel controller a leggere il valore impostato nella GUI?

    Quello dovrebbe essere veicolato dal Model, così come già avevi fatto prima (non dovrebbero esserci modifiche a quella parte del codice).

    Prova anche a verificare (usando i Developer Tools col tasto F12) quali sono i valori che vengono inviati al server in fase di POST, e che tutti i nomi e i valori coincidano esattamente.

Devi accedere o registrarti per scrivere nel forum
3 risposte