Как я могу СУММУ два разных выбора, переданных модели? - PullRequest
0 голосов
/ 21 марта 2012

Я беру предыдущий вопрос на шаг вперед (см. этот вопрос ), я пытаюсь выяснить, как 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.Expedited и Submission.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. Я упустил Namespace.ViewModels.MyData до Processing. для краткости.
  4. Я упустил Submission для краткости, так как это просто +, тогда та же логика, что и в Processing.

1 Ответ

0 голосов
/ 21 марта 2012

Вы знаете, что выбор перед отбором, учитывая, что ваш @if (Model.SubmissionRadioButtions == Submission.Online) является тестом против значений, которые в настоящее время хранятся в модели, даже если это только после POST.

Таким образом, вы должны создать свойство в вашей модели представления, которое также выполняет эти тесты и суммирует соответствующие поля.

Если вы не хотите, чтобы это свойство отображалось до POST, заставьте свойство возвращать обнуляемый тип и оберните представление с @if(MySum.HasValue) { @Html.DisplayFor(m=>m.MySum) }

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