Вы должны проверить это вручную, ASP.NET MVC не делает этого за вас:
Type enumType = gender.GetType();
bool isEnumValid = Enum.IsDefined(enumType, gender);
if (!isEnumValid) {
throw new Exception("...");
}
Вместо того, чтобы выдавать исключение, вы также можете использовать валидатор в модели, который проверяет, не перечислено ли перечислениеявляется правильным.
Причина, по которой недопустимое перечисление передается через параметр, заключается в том, что перечисления являются целыми числами, объяснено здесь .