Лучший способ интегрировать значения в enum (словарь), а затем вычислять на основе выбора пользователя в форме - PullRequest
2 голосов
/ 15 июля 2011

Будем весьма благодарны за любые указания или указания на пример (я не могу сформулировать хороший поисковый запрос в Googleplex).

У меня есть модель, использующая перечисления, которые я определяю в словаре, а затем визуализирую в представлении с помощью @ Html.RadioButtonFor и т. Д.

Вот пример моей модели:

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));
            }
        }

И, для полноты, это мое мнение, связанное с вышеизложенным:

<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>

Это система котировок, которую я заполняю пользователями.Скажем, за эту конкретную услугу я беру 1000 долларов.Это базовая цена.Исходя из пользовательского ввода, эта цена будет изменена, и я хочу показать это пользователю.Таким образом, если пользователь выбирает первый вариант, цена остается неизменной.Если пользователь выбирает второй вариант, плата увеличивается на $ 100,00.

Это изменяется экспоненциально, так как есть больше входных данных, которые влияют на цену (если выбрано).

В конечном счете, на основепользовательские входы, мне нужно рассчитать сумму.Я рендеринга вид, который будет отображать итог.Я думал об использовании некоторых блоков @ {} и if / else if, когда операторы либо a) ничего не показывают, если то, что было выбрано, не увеличивает общую сумму, либо b) показывают дополнительную сумму (например, $ 100,00), а затем позже показываютвсего.

Примерно так (РЕДАКТИРОВАНИЕ здесь для ясности):

  • Базовый сервис: 1 000,00
  • Дополнительный сервис 1: 100,00 $ (только если пользователь выбирает «PaymentPlan_Two» для двухплатежи по 50% каждый (из перечисления PaymentPlanList), в противном случае скрытые (и без добавления $ 100,00), если пользователь выбирает «PaymentPan_One» и платит полностью)
  • Addon service2: 0,00 $ (это скрыто и 0,00 $или нет значения, так как пользователь не выбирал ничего из отдельного перечисления, но при выборе будет добавлено значение $ 100,00, что в сумме составит $ 1200,00, если бы оно было выбрано; АЛЬТЕРНАТИВНО, как я могу обработать, если было 3 или более элементовв списке? Например, Choice_One - 0,00 долл. США, Choice_Two - 100 долл. США и Choice_Three - 200,00 долл. США *
  • ИТОГО: 1 100,00 долл. США

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 06 сентября 2011

давайте посмотрим, правильно ли я понимаю ваши требования:

  • Приложению необходимо добавить цены к базовой цене, в зависимости от выбора услуг Addon.
  • Эти варианты выбираются изСловарь, основанный на Enum
  • . Поэтому мы стремимся сохранить цену по отношению к Enum, чтобы сохранить ассоциации данных в одном месте.

Можно сохранитьодно значение против Enum:

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

Однако я не думаю, что это будет достаточно гибким для наших нужд - Перечисления допускают только целые числа иобычно используется таким образом в побитовых операциях (где значения кратны 2).

Я думаю, что лучшим решением здесь может быть использование Model-View-View-Model(MVVM) , который может содержать логику о том, какие услуги доступны, сколько они стоят и какие услуги действительны в сочетании с другими услугами.

Существует пример ценообразования билетов (который звучит какмилар в концепции домена) на домашней странице Knockout.js , которая пересчитывает стоимость проездного билета на веб-странице клиента на основе выбора пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...