2017-02-07 8 views
0

Домашнее задание на руки.Разбор в C# MVC asp.net Модель

У меня есть модель, которая выплескивает простую форму добавления на html-странице. Модель представления написана для обработки Требуемые значения (например:. [Required(ErrorMessage = "Missing a number, please enter decimals to add.")]

Однако в Domain модели, мне нужно TryParse два поля ввода, чтобы убедиться, что значения, введенные десятичные значения (положительные или отрицательные) I попытались отфильтровать на основе [Диапазон], простой TryParse, Parse, и все остальное, что я знаю, как это сделать, но не могу обойти исключения, чтобы увидеть сообщение об ошибке (например, выше «Отсутствует номер», введите десятичные знаки в . добавить ") Я искал на этот и многие другие сайты, в том числе:

и многое другое ... Любая помощь будет принята с благодарностью.

public class MyAbacusDomainModel 
{ 
    public MyAbacusDomainModel(string number1, string number2) 
    { 
    Number1 = number1; 
    Number2 = number2; 
    Sum = CalculateSum(number1, Number2); 
    } 

    public string Sum { get; set; } 
    public string Number1 { get; set; } 
    public string Number2 { get; set; } 

    // need to parse the two number values here to get the boolean results 

    private string CalculateSum(string number1, string number2) 
    { 
    double number1double = Convert.ToDouble(number1); 
    double number2double = Convert.ToDouble(number2); 
    double sum = (number1double + number2double); 
    return sum.ToString();  
    }    
} 
+5

Можете ли вы объяснить, почему вы храните число внутри строки? Почему бы вам просто не объявить свой номер 1/2 как двойной/десятичный? – Steve

+0

Возможно использование 'контрактов'? – Hackerman

+0

У задания был фрагмент кода, который был строкой (только с номерами), инструктор не дал никаких инструкций, поэтому я конвертирую его в двойное, но все же пытаюсь пройти мимо исключений. –

ответ

0

Помогает ли это?

decimal number; 

// Parse a floating-point value with a thousands separator. 

var value = "1,643.57"; 

Decimal.TryParse(value, out number); 
1

Вы можете создать свойство viewmodel как double? type с атрибутом Required и Range.

Вам не нужно проверять, что значения wheter являются двойными, потому что они всегда будут хорошими значениями, если ModelState.IsValid является истинным в действии контроллера.

[Required] 
public double? Number {get; set;} 

Если есть какая-то необходимость использовать строковые значения в модели домена, то вы можете просто разобрать ввод в строку. Это будет всегда двойное значение, поэтому вам не нужно делать никаких дополнительных проверок.

Если для вашей домашней работы нет такого требования, было бы целесообразно изменить типы, которые сохраняют значения для вашей модели домена. Необычно и неправильно хранить числа в виде строк.