2012-03-21 1 views
0

Je prends une question préalable un peu plus loin (voir this question), j'essaie de comprendre comment sum deux (ou plus) sélections faites par l'utilisateur avec, par exemple, une liste de boutons radio. La sélection effectuée par l'utilisateur est liée à une entité qui contient une valeur de devise statique à l'aide des instructions if/else if.Comment puis-je SOMME deux sélections différentes passées au modèle?

Ce sont les entités pour le prix:

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

Donc, si j'ai deux séries de if/else if déclarations telles que:

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

et l'utilisateur effectue une sélection dans les deux listes de boutons radio séparés correspondant à Processing.Expedited et Submission.Manual, le code affichera respectivement $250.00 et $200.00.

Je ne peux pas, cependant, comprendre comment sum ces deux pour afficher $450.00. Gardez à l'esprit, je ne connais pas les sélections avant la main, donc faire priceProcessingExpedited + priceSubmissionManual dans une fonction, puis l'appeler ne fonctionnera évidemment pas. Aussi, je fais environ 10-15 d'entre eux mais j'ai seulement utilisé deux simples comme exemple de ce que j'essaie d'accomplir (donc le fait que les deux autres choix sont $0.00 ne veut rien dire parce qu'il y a des prix variables pour autres choix que j'ai laissés de côté).

Une guidance?

MISE À JOUR: Sur la base de suggestion, en réponse, que je fais ceci:

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

Quelques notes:

  1. priceSolution est une valeur statique que je l'utilise comme base (c'est la valeur de base plus les sélections de l'utilisateur).
  2. J'utilise calculated dans le ViewModel et get; set; en l'utilisant. J'ai omis le Namespace.ViewModels.MyData avant Processing. pour la brièveté.
  3. J'ai omis Submission pour la brièveté car c'est juste un + alors la même logique que dans Processing.

Répondre

0

Vous connaissez les sélections précédentes étant donné que @if (Model.SubmissionRadioButtions == Submission.Online) est un test effectué sur les valeurs actuellement détenues par le modèle - même si ce n'est qu'après un POST. En tant que tel, vous devez créer une propriété dans votre modèle de vue qui effectue également ces tests et additionne les champs appropriés.

Si vous ne voulez pas cette propriété affichée avant le POST, faire le bien retourner un type nullable et envelopper la vue avec @if(MySum.HasValue) { @Html.DisplayFor(m=>m.MySum) }

+0

J'ai fait une erreur sémantique en moi-même expliquer. Je connais les choix, oui, je ne sais pas à l'avance ce qu'un utilisateur particulier choisira, c'est ce que je voulais dire. J'ai précédemment essayé de créer une propriété dans le modèle de vue, mais je l'ai mucked avec tous les différents choix. J'espérais juste qu'il y avait une façon plus simple de «résumer» ce qui est finalement affiché. – REMESQ

+0

Après quelques recherches, votre conseil m'a conduit à la bonne réponse. Merci. Voir mise à jour en question. – REMESQ

Questions connexes