ฉันต้องการระบุว่าฟิลด์ทศนิยมของราคาจะต้อง> = 0 แต่ฉันไม่ต้องการกำหนดค่าสูงสุด
นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ ... ฉันไม่แน่ใจว่าวิธีการที่ถูกต้องคืออะไร
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
ฉันต้องการระบุว่าฟิลด์ทศนิยมของราคาจะต้อง> = 0 แต่ฉันไม่ต้องการกำหนดค่าสูงสุด
นี่คือสิ่งที่ฉันมีจนถึงตอนนี้ ... ฉันไม่แน่ใจว่าวิธีการที่ถูกต้องคืออะไร
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
คำตอบ:
เกี่ยวกับบางสิ่งเช่นนี้:
[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]
ควรทำสิ่งที่คุณกำลังมองหาและคุณสามารถหลีกเลี่ยงการใช้สตริง
The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
หากคุณกังวลเกี่ยวกับสตริงที่ดูดีคุณสามารถทำได้:
[Range(0, Double.PositiveInfinity)]
นี่จะมีข้อความแสดงข้อผิดพลาดเริ่มต้นเป็น:
ช่อง SuchAndSuch ต้องอยู่ระหว่าง 0 ถึง Infinity
ดูเหมือนว่าไม่มีทางเลือกนอกจากต้องใส่ค่าสูงสุดด้วยตนเอง ฉันหวังว่าจะมีการโอเวอร์โหลดบางประเภทที่คุณไม่จำเป็นต้องระบุ
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
[Min(0)]
- ข้อความนี้ยังมีข้อความยืนยันที่ดีกว่า ฉันขอแนะนำให้อัปเดตคำตอบของคุณ
คุณสามารถใช้ได้:
[Min(0)]
สิ่งนี้จะกำหนดค่าต่ำสุดที่จำเป็นเป็น 0 (ศูนย์) และไม่มีค่าสูงสุด
คุณต้องการDataAnnotationsExtensionsเพื่อใช้สิ่งนี้
หากคุณกำลังทำงานกับราคาฉันแน่ใจว่าคุณสามารถสรุปได้อย่างปลอดภัยว่าไม่มีอะไรจะมีราคามากกว่า 1 ล้านล้านดอลลาร์
ฉันต้องการใช้:
[Range(0.0, 1000000000000)]
หรือหากคุณต้องการจริงๆเพียงแค่วางค่าDecimal.MaxValue
(โดยไม่มีเครื่องหมายจุลภาค):79,228,162,514,264,337,593,543,950,335
หากคุณไม่ได้มาจากซิมบับเว
[Range(0.0,Decimal.MaxValue)]
?
คุณสามารถใช้การตรวจสอบที่กำหนดเอง:
[CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
public int IntValue { get; set; }
[CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
public decimal DecValue { get; set; }
ประเภทวิธีการตรวจสอบ:
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 });
}
}
}
ฉันจะลองทำสิ่งนี้:
[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]
แม้ว่าปัญหาของการทำเช่นนี้คือคอมไพเลอร์ต้องการนิพจน์คงที่ซึ่งไม่สามารถ((double)0).ToString()
ทำได้ คอมไพเลอร์จะใช้เวลา
[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]
ใช้ช่วงกับ
[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[Range(typeof(Decimal),"0.0", "1000000000000000000"]
หวังว่ามันจะช่วย
[ช่วง (0.01,100000000, ErrorMessage = "ราคาจะต้องยิ่งกว่าศูนย์!")]
ฉันจะใส่decimal.MaxValue.ToString()
ตั้งแต่นี้เป็นเพดานที่มีประสิทธิภาพสำหรับประเภท decmial มันเทียบเท่ากับไม่มีขอบเขตบน