Я пытаюсь условно рассчитать некоторые значения на основе пользовательских данных в форме. Сами «входные данные» связаны с расчетом в том смысле, что если пользователю представлены два списка переключателей, его выбор будет определять, будет ли добавлена сумма в валюте, а затем добавлена вместе. Я не понимаю jquery, и поэтому я не могу понять, как использовать что-то вроде knockout.js, чтобы делать то, что я хочу (кроме того, мои вычисления будут отображаться только в виде подтверждения и не будут «пересчитываться», если только пользователь возвращается и меняет свой выбор).
Обратите внимание, я не говорю о сценарии, в котором у вас есть текстовое поле, которое принимает значение и добавляет его к другому значению текстового поля, которое вводит пользователь (например, пользователь вводит 10, затем 10, а затем форма вычисляет 20). Значения являются статическими в зависимости от выбора.
Для контекста я использую Serializer и мастер, который проходит и передает выбор / ввод модели в последующее представление.
Я могу сделать что-то подобное в качестве примера (это просто, но основываясь на ответах, я могу выяснить, как построить это в соответствии с более сложным сценарием, который у меня есть):
Model.cs:
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal calculated { get; set; }
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal option1 = 500;
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal option2 = 100;
//Following is just my idea to calculate $0 if
//a selection results in a "no value option"
//although I suppose if nothing is selected I
//can just avoid calculating + $0
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal nooption = 0;
Затем в Confirm.cshtml:
@{
Model.calculated = Model.option1 + Model.option2 + Model.nooption;
}
....
@Html.DisplayFor(m => m.calculated)
отобразит $600.00
. Это достаточно просто.
Однако, моя цель тройная . Сначала , мне нужно связать, например, option1
с выбором из списка радиокнопок и option2
с другим списком радиокнопок в зависимости от того, что выберет пользователь. Второй , в зависимости от выбора. Я хочу условно рассчитать все имеющиеся параметры, которые, очевидно, будут варьироваться в зависимости от выбора пользователя (некоторые пользователи будут выбирать option1
и option2
, другие просто option1
, другие просто option2
, другие тоже нет). Третий , где лучше всего проводить вычисления (представление, файл .cs
, контроллер (хотя я пытаюсь минимизировать код там) и т. Д.).
Итак, если у меня есть эти перечисления для списков радиокнопок (каждый вариант соответствует варианту на данный момент, позже я буду обсуждать два варианта для перечисления списка радиокнопок):
public enum radio1
{
radio1selection1, // this would correspond to nooption (or $0)
radio1selection2 // this would correspond to option1 (or $500)
}
public enum radio2
{
radio2selection1, // this would correspond to nooption (or $0)
radio2selection2 // this would correspond to option2 (or $100)
}
Я указал в enums
, как я хотел бы «привязать» опцию к выбору.
Моя проблема заключается в попытке сделать if
утверждения, которые я не могу понять правильно. Примерно так в Confirm.cshtml
:
@{
if (Model.radio1 == radio1selection1)
Model.calculated = Model.nooption;
else....
}
Вышесказанное совершенно неверно, я знаю. Я пытаюсь придумать все варианты расчета, но я не думаю, что это стоит затраченных усилий, потому что это было бы либо неправильно, либо сработало бы, но слишком долго, когда есть более простой способ. Я даже думал о попытке case/break
, но это тоже странно кажется неправильным подходом.
Что добавляет мне сложности, так это то, что мои enums
имеют более двух вариантов выбора, и эти другие варианты дают несколько вариантов, скажем option1
и option1a
, и в зависимости от того, какой пользователь выберет, будут определять расчет. Таким образом, перечисление становится:
public enum radio1
{
radio1selection1, // this would correspond to nooption (or $0)
radio1selection2, // this would correspond to option1 (or $500)
radio1selection3 // this would correspond to NEW
// option1a (or $750) (with a corresponding
// "int" named "option1a")
}
Одна из вещей, о которых я подумал, это просто отобразить все опции, выбранные в <table>
в представлении, так что даже если что-то имеет значение $ 0, оно просто скажет $ 0 в качестве опции. Тогда я подумал, что могу просто добавить все имеющиеся значения. Но все же я не знаю, как лучше всего это сделать.
Есть ли какие-либо мнения о том, как я смогу и / или все три из моих заявленных целей выше?