it-swarm.com.de

Wie kann mit dem Annotationsattribut für Bereichsdaten eine minimale, aber keine maximale Dezimalzahl angegeben werden?

Ich möchte angeben, dass ein Dezimalfeld für einen Preis> = 0 sein muss, aber ich möchte nicht wirklich einen Maximalwert festlegen.

Hier ist, was ich bis jetzt habe ... Ich bin nicht sicher, was der richtige Weg ist, dies zu tun.

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
121
user169867

Nun, es scheint, es gibt keine andere Wahl, als den Maximalwert manuell einzugeben. Ich hatte gehofft, dass es eine Art Überladung gab, bei der Sie keine Angabe machen mussten.

[Range(typeof(decimal), "0", "79228162514264337593543950335")
  ] public decimal Price { get; set; } 
33
user169867

Wie wäre es mit so etwas:

[Range(0.0, Double.MaxValue)]

Das sollte das tun, wonach Sie suchen, und Sie können Strings nicht verwenden.

185
Jacob

Wenn Sie besorgt sind, dass die Saite Nizza aussieht, können Sie Folgendes tun:

    [Range(0, Double.PositiveInfinity)]

Dies hat eine Standardfehlermeldung von:

Das Feld SuchAndSuch muss zwischen 0 und Infinity liegen. 

69
Jordan

Sie können verwenden:

[Min(0)]

Dadurch wird ein erforderlicher Mindestwert von 0 (Null) und kein Maximalwert festgelegt.

Sie benötigen DataAnnotationsExtensions , um dies zu verwenden.

30

Wenn Sie mit Preisen arbeiten, können Sie sicher davon ausgehen, dass nichts mehr als 1 Billion Dollar kostet.

Ich würde verwenden:

[Range(0.0, 1000000000000)]

Oder, wenn Sie es wirklich brauchen, fügen Sie einfach den Wert von Decimal.MaxValue (ohne die Kommas) ein: 79.228.162.514.264.337.593.543.950.335

Wenn Sie nicht aus Simbabwe sind, funktioniert eine dieser Optionen gut.

19
John Farrell

Sie können die benutzerdefinierte Überprüfung verwenden:

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }

Art der Validierungsmethoden:

public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List<string>() { context.MemberName });
        }
    }
}
10

[Range (0.01,100000000, ErrorMessage = "Preis muss größer als Null sein!")]

1
Sohail Akhter

Ich würde decimal.MaxValue.ToString() setzen, da dies die effektive Obergrenze für den Dezimaltyp ist.

1
Dr Herbie

Ich wollte so etwas versuchen:

[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]

Das Problem dabei ist jedoch, dass der Compiler einen konstanten Ausdruck wünscht, der ((double)0).ToString() nicht zulässt. Der Compiler wird nehmen

[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
1

verwendung von Range mit

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

[Range(typeof(Decimal),"0.0", "1000000000000000000"]

Ich hoffe es wird helfen

0
Abi