Дополнительное поле ASP.NET MVC обрабатывается по мере необходимости

У меня есть это поле, которое по какой-то причине, когда я нажимаю кнопку "Отправить", получает сообщение проверки, что это поле необходимо.

[DisplayName("Total Budget:")]
public double Budget { get; set; }


@Html.EditorFor(model => model.account.Budget)
@Html.ValidationMessageFor(model => model.account.Budget)




  public class Account
    {

        [DisplayName("Total Budget:")]
        public double Budget { get; set; } //dropdown

    }

Ответ 1

Встроенный DefaultModelBinder в MVC будет выполнять требуемую и проверку типов данных в типах значений, таких как int, DateTime, decimal и т.д. Это произойдет, даже если вы явно не указали проверку с помощью someting like [Required].

Чтобы сделать это необязательным, вам необходимо определить его как nullable:

public double? Budget { get; set; }

Ответ 2

double - тип значения. Типы значений всегда содержат значение, даже если вы его не задали. Это значение является значением по умолчанию для этого типа (в данном случае 0.0). Все типы значений обрабатываются в соответствии с требованиями структуры. Единственный способ - создать настраиваемое связующее устройство, но это не помешает модели содержать значение по умолчанию (потому что нет способа сказать, что он не был введен).

Итак, даже если вы создадите настраиваемое связующее, когда вы обрабатываете свою модель, вы не сможете определить, был ли кто-то введен в 0 или это было только значение по умолчанию.

Таким образом, единственным реальным решением является изменение вашей модели представления для использования типа с нулевым значением, например Nullable<double> (сокращение double?).

Ответ 3

Вероятно, вы измените бюджет с double на double?

Вероятно, вы можете попробовать добавить этот атрибут к контроллеру

BindExclude([Bind(Exclude="Budget")]), а также