2012-03-21 48 views
0

我在进一步探讨前面的问题(请参阅this question),我想弄清楚如何sum两个(或多个)用户选择的选项,例如单选按钮列表。用户所作的选择与包含使用if/else if陈述的静态货币值的实体相关联。如何将两个不同的选择合并到模型中?

这些都是实体价格:

[DataType(DataType.Currency)] 
[DisplayFormat(DataFormatString = "{0:c}")] 
public decimal priceProcessingStandard = 0; 

[DataType(DataType.Currency)] 
[DisplayFormat(DataFormatString = "{0:c}")] 
public decimal priceProcessingExpedited = 250; 

[DataType(DataType.Currency)] 
[DisplayFormat(DataFormatString = "{0:c}")] 
public decimal priceSubmissionOnline = 0; 

[DataType(DataType.Currency)] 
[DisplayFormat(DataFormatString = "{0:c}")] 
public decimal priceSubmissionManual = 200; 

所以,如果我有两套if/else if语句,如:

@if (Model.ProcessingRadioButtons == Processing.Standard) 
{ 
    @Html.DisplayFor(m => m.priceProcessingStandard) 
} 
else if (Model.ProcessingRadioButtons == Processing.Expedited) 
{ 
    @Html.DisplayFor(m => m.priceProcessingExpedited) 
} 
... 
@if (Model.SubmissionRadioButtons == Submission.Online) 
{ 
    @Html.DisplayFor(m => m.priceSubmissionOnline) 
} 
else if (Model.SubmissionRadioButtons == Submission.Manual) 
{ 
    @Html.DisplayFor(m => m.priceSubmissionManual) 
} 

并且用户在两个单独的单选按钮列表选择对应于Processing.ExpeditedSubmission.Manual,代码将分别显示$250.00$200.00

但是,我不知道如何sum这两个显示$450.00。请记住,我不知道之前的选择,所以在一个函数中做priceProcessingExpedited + priceSubmissionManual,然后调用它显然不起作用。另外,我正在做大约10-15个,但我只用了两个简单的例子作为我想要完成的一个例子(所以其他两个选择$0.00并不意味着什么,因为有不同的价格我遗漏的其他选择)。

任何指导?

UPDATE: 基于回答的建议,我这样做:

Model.calculated = 
    Model.priceSolution + 
    ((Model.ProcessingRadioButtons == Processing.Standard) ? 
    Model.priceProcessingStandard : 
    (Model.ProcessingRadioButtons == Processing.Expedited) ? 
    Model.priceProcessingExpedited : 
    Model.priceProcessingUrgent); 

一些注意事项:

  1. priceSolution是我作为一个基地使用静态值(它是基础值加上用户选择)。
  2. 我在使用calculated的ViewModel和get; set;
  3. 为了简洁,我在Processing.之前省略了Namespace.ViewModels.MyData
  4. 为简洁起见,我忽略了Submission,因为它只是+,所以与Processing中的逻辑相同。

回答

0

你知道选择的手,然后才考虑你的@if (Model.SubmissionRadioButtions == Submission.Online)是针对目前由模型所保持的值进行测试 - 即使这只是一个POST之后。

因此,您应该在您的视图模型中创建一个属性,该属性还会执行这些测试并对相应的字段进行求和。

如果你不希望此属性显示之前,POST,使属性返回一个空类型,敷用@if(MySum.HasValue) { @Html.DisplayFor(m=>m.MySum) }

+0

认为我解释我自己做了一个语义错误做。我知道的选择,是的,我不知道一个特定的用户会选择什么是我的意思。我以前试图在视图模型中创建一个属性,但是我用所有不同的选择来隐藏它。我只是希望有一种更清晰的方式来“总结”最终显示的内容。 – REMESQ 2012-03-21 12:56:56

+0

经过一番研究,你的建议让我得到了正确的答案。谢谢。查看有问题的更新。 – REMESQ 2012-03-21 16:40:14

相关问题