Я бы использовал TryParse. Валидатор должен работать. Я не видел, и случай, когда это не так. При этом ваш код всегда должен пытаться защитить себя от плохих значений. В коде теперь может быть валидатор, но в будущем он может отсутствовать, поэтому вы не можете полагаться на то, что он там есть, и только потому, что валидатор должен работать, не означает, что он будет всегда (вы могли случайно переместить код проанализировать переменную до запуска валидатора на стороне сервера). Так же просто, как заменить Parse на TryParse, нет причин не использовать TryParse и защитить себя от потенциальной проблемы с непроверенным элементом ввода.
В ответ на комментарий Джейкса. Он напишет, что вы узнаете, если проверка не сработает, выдав ошибку, и в этом случае она должна быть в блоке try catch. Таким образом, в этом случае вы действительно делаете то же самое, что и оператор TryParse, за исключением того, что вам нужно написать дополнительный код для обработки возможного создаваемого исключения, а генерирование исключений происходит медленнее, чем проверка bool на успех.