ASP.NET champ optionnel MVC traité comme requis

j'ai ce champ qui, pour une raison quelconque lorsque je clique sur soumettre, reçoit un message de validation que le champ est requis.

[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
}
32
demandé sur Rajmond Burgaj 2012-11-08 20:25:13

6 réponses

le relieur Defaultmodel intégré dans MVC effectuera la validation requise et de type de données sur des types de valeurs comme int, DateTime, decimal, etc. Cela se produira même si vous ne spécifiez pas explicitement la validation en utilisant someting comme [Required] .

pour rendre cette option optionnelle, vous devrez la définir comme nulle:

public double? Budget { get; set; }
80
répondu Jerad Rose 2012-11-08 16:40:27

double est un type de valeur. Les types de valeurs contiennent toujours une valeur, même si vous n'en avez pas défini une. Cette valeur est la valeur par défaut pour son type (dans ce cas 0.0 ). Tous les types de valeurs sont traités comme l'exige le cadre. La seule façon d'éviter cela est de créer un classeur de modèle personnalisé, mais cela n'empêchera pas le modèle de contenir la valeur par défaut (parce qu'il n'y a aucun moyen de dire qu'il n'a pas été saisi).

donc même si vous créez une binder, quand vous traitez votre model, vous ne pourrez pas dire si quelqu'un a entré 0 ou si c'était juste la valeur par défaut.

ainsi, la seule vraie solution est de changer votre modèle de vue pour utiliser un type nul, tel que Nullable<double> (abréviation: double? ).

6
répondu Erik Funkenbusch 2012-11-08 16:49:35

vous changez probablement le Budget d'un double en double?

vous pouvez probablement essayer d'ajouter cet attribut au contrôleur

BindExclude([Bind(Exclude="Budget")]) ainsi que

2
répondu Antarr Byrd 2012-11-08 16:47:50

vous devez ajouter la ligne suivante dans application_start (global.asax)

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

Source: Unrequired propriété ne cesse de données-val-attribut obligatoire

2
répondu Nahuel García 2017-05-23 12:02:27

utiliser [NotMapped] annotation, ce qui supprime la validation requise dans le flux que vous utilisez également propres attributs d'affichage

0
répondu Mahesan Rv 2018-02-15 14:28:14

Utiliser Nullable ou ? après le nom de l'attribut.

0
répondu Nabeel Mahmood 2018-02-19 08:54:10