FormCollection
- это набор пар ключ-значение (NameValueCollection
), который возвращает значения в виде строки на основе предоставленного ключа, который также является строкой. Если вы сомневаетесь, какой числовой формат применяется при вводе чисел во время отправки, используйте комбинацию decimal.TryParse()
и условие if с string.IsNullOrEmpty()
, чтобы проверить нулевое / пустое строковое значение:
decimal expense;
if (!string.IsNullOrEmpty(formValues["expenseBackup"])
&& decimal.TryParse(formValues["expenseBackup"], out expense))
{
var data = new usr_ebillingClientDatabase()
{
client = formValues["client"],
expenseBackup = expense
};
// insert to database
}
else
{
// unable to parse numeric value, do something else
}
Если вы уверены, что числовое представление, переданное в FormCollection
, использует определенный десятичный разделитель, отличный от значения по умолчанию, используйте NumberFormatInfo
при разборе с decimal.Parse()
/ decimal.TryParse()
:
var numberFormat = new System.Globalization.NumberFormatInfo() { NumberDecimalSeparator = "," };
var data = new usr_ebillingClientDatabase()
{
client = formValues["client"],
expenseBackup = decimal.Parse(formValues["expenseBackup"], numberFormat);
};
Однако я рекомендую использовать строго типизированную модель представления вместо FormCollection
, потому что вы используете EditorFor
, и она будет передавать значения свойств непосредственно в контроллер, когда имя модели представления включено в качестве параметра действия.