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
}
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; }
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?
).
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
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
utiliser [NotMapped] annotation, ce qui supprime la validation requise dans le flux que vous utilisez également propres attributs d'affichage