将值集成到枚举(字典)中的最佳方法,然后根据表单中的用户选择进行计算

时间:2011-07-15 03:34:52

标签: asp.net-mvc-3

任何指导或指向我的例子都会非常感激(我无法在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>

这是我用户填写的报价系统。对于这项特殊服务,请说我收取1,000.00美元。这是基本价格。根据用户输入,此价格将被更改,我想向用户显示。因此,如果用户选择第一个选项,则价格保持不变。如果用户选择第二个选项,则费用增加$ 100.00。

这会呈指数级变化,因为有更多输入影响价格(如果选择)。

最终,根据用户输入,我需要计算总数。我正在渲染一个显示总数的视图。我正在考虑使用一些@ {}块和if / else if语句a)如果选择的内容不会增加总数,或者b)显示额外的数量(例如,$ 100.00),然后显示a总

像(为了清楚起见,在这里编辑):

  • 基本服务:$ 1,000.00
  • Addon service1:$ 100.00(仅当用户选择“PaymentPlan_Two”进行两次50%的付款时(来自PaymentPlanList枚举),否则隐藏(并且不添加$ 100.00),如果用户选择“PaymentPan_One”并全额付款)
  • 插件服务2:$ 0.00(这是隐藏的,$ 0.00或没有值,因为用户没有从单独的枚举中选择任何内容,但是如果选中则会添加$ 100.00的值,如果选中它将使总计$ 1,200.00 ;另外,如果列表中有3个或更多项目,我该如何处理?例如,Choice_One为0.00美元,Choice_Two为100.00美元,Choice_Three为200.00美元)
  • 总计:$ 1,100.00

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

让我们看看我是否正确理解了您的要求:

  • 应用程序需要将价格添加到基本价格,具体取决于 选择Addon服务。
  • 这些选择来自Dictionary,它基于Enum
  • 因此,我们希望将价格存储在Enum中,以便将数据关联保存在一个位置。

可以针对枚举存储单个值:

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

但是,我认为这不足以满足我们的需求 - 枚举只允许整数,并且通常以这种方式在bitwise operations中使用(其中值是2的倍数。)

我认为这里更好的解决方案可能是使用Model-View-View-Model (MVVM),其中可以包含有关哪些服务可用,服务费用以及哪些服务与其他服务一起有效的逻辑。

Knockout.js home page上有一个票价定价示例(在概念上与此类似的概念),可根据用户选择在客户端网页上重新计算旅行票价。