2 votes

Meilleure façon d'intégrer des valeurs dans un enum (dictionnaire), puis de calculer en fonction de la sélection de l'utilisateur dans le formulaire.

Tout conseil ou indication d'un exemple serait très apprécié (je n'arrive pas à formuler un bon terme de recherche sur le Googleplex).

J'ai un modèle utilisant des enums que je définis dans un dictionnaire et que je rends ensuite dans la vue avec @Html.RadioButtonFor, etc.

Voici un exemple de mon modèle :

public PaymentPlanList PaymentPlan { get; set; }
        public enum PaymentPlanList
        {
            PaymentPlan_One,
            PaymentPlan_Two,
        }
        public class PaymentPlanDictionary
        {
            public static readonly Dictionary<PaymentPlanList, string> paymentplanDictionary = new Dictionary<PaymentPlanList, string>
            {
            { PaymentPlanList.PaymentPlan_One, "One full payment in advance (receive the lowest price)." },
            { PaymentPlanList.PaymentPlan_Two, "Two payments: first payment of 50% due up front, the balance of 50% due within 30 days (increases fee by $100)." },
            };
            static string ConvertPaymentPlan(PaymentPlanList paymentplanlist)
            {
                string name;
                return (paymentplanDictionary.TryGetValue(paymentplanlist, out name))
                    ? name : paymentplanlist.ToString();
            }
            static void Main()
            {
                Console.WriteLine(ConvertPaymentPlan(PaymentPlanList.PaymentPlan_One));
                Console.WriteLine(ConvertPaymentPlan(PaymentPlanList.PaymentPlan_Two));
            }
        }

Et, pour être complet, voici mon point de vue sur ce qui précède :

<p>
    @Html.RadioButtonFor(m => m.PaymentPlan, "PaymentPlan_One")
    One full payment in advance (receive the lowest price).
</p>
<p>
    @Html.RadioButtonFor(m => m.PaymentPlan, "PaymentPlan_Two")
    Two payments: first payment 50% due up front, the balance of 50% due within 30 days (increases fee by $100).
</p>

C'est un système de devis que je fais remplir aux utilisateurs. Pour ce service particulier, disons que je facture 1 000 $. C'est le prix de base. En fonction de l'entrée de l'utilisateur, ce prix sera modifié, et je veux le montrer à l'utilisateur. Donc, si l'utilisateur sélectionne la première option, le prix reste inchangé. Si l'utilisateur sélectionne la deuxième option, le prix est augmenté de 100,00 $.

Cette évolution est exponentielle, car il y a plus d'intrants qui affectent le prix (s'il est sélectionné).

En fin de compte, sur la base des entrées de l'utilisateur, je dois calculer le total. Je rends une vue qui affichera le total. Je pensais utiliser des blocs @{} et des instructions if/else if pour soit a) ne rien afficher si ce qui a été sélectionné n'augmente pas le total, soit b) afficher le montant supplémentaire (par exemple, 100,00 $), puis plus tard afficher un total.

Quelque chose comme (ÉDITER ici pour plus de clarté) :

  • Service de base : 1 000,00
  • Service complémentaire1 : 100,00 $ (uniquement si l'utilisateur sélectionne "PaymentPlan_Two" pour deux paiements de 50 % chacun (dans l'énumération PaymentPlanList), sinon caché (et pas d'ajout des 100,00 $) si l'utilisateur sélectionne "PaymentPan_One" et paie en totalité)
  • Service complémentaire 2 : 0,00 $ (cette valeur est cachée et représente 0,00 $ ou aucune valeur puisque l'utilisateur n'a rien sélectionné dans une énumération séparée, mais la valeur de 100,00 $ serait ajoutée si elle était sélectionnée, ce qui donnerait un total de 1 200,00 $ si elle était sélectionnée. Par exemple, le Choix_1 est 0,00 $, le Choix_2 est 100,00 $ et le Choix_3 est 200,00 $).
  • TOTAL : 1 100,00

Merci pour toute aide.

0voto

Andrew Points 4523

Voyons si je comprends bien vos exigences :

  • L'application doit ajouter des prix à un prix de base, en fonction de la la sélection de services complémentaires.
  • Ces sélections sont issues d'un dictionnaire, qui est basé sur un Enum.
  • Par conséquent, nous cherchons à stocker le prix dans l'Enum afin de conserver les associations de données en un seul endroit.

Il est possible de stocker une seule valeur dans une Enum :

    public enum PaymentPlanList
    {
        PaymentPlan_One = 100,
        PaymentPlan_Two = 200,
    }

Cependant, je ne pense pas que cela soit suffisamment flexible pour nos besoins. - Les Enums n'autorisent que les nombres entiers et sont couramment utilisés de cette manière dans les applications suivantes opérations sur les bits (où les valeurs sont des multiples de 2).

Je pense qu'une meilleure solution ici pourrait être d'utiliser une Modèle-Vue-Vue-Modèle (MVVM) qui peut contenir la logique concernant les services disponibles, leur coût et les services valables en combinaison avec d'autres services.

Il existe un exemple de tarification des billets (dont le concept semble similaire à celui du domaine ici) sur le site Web de la Commission européenne. Page d'accueil de Knockout.js qui recalcule le prix d'un billet de voyage sur la page web du client en fonction de la sélection de l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X