gpt4 book ai didi

c# - 如何在 asp.net mvc3 中不允许任何属性或某个属性的值

转载 作者:行者123 更新时间:2023-11-30 22:36:21 25 4
gpt4 key购买 nike

我有一个自定义类的 3 个属性,它的日期、小时和分钟。这些表示用户可以输入的字段,但它们不是必需的,但如果一个字段已填写,那么其他 2 个字段也应该填写(不确定这部分是否可以使用纯 c#)

这段代码是我写的

    [RegularExpression("[0-9]{2}-[0-9]{2}-[0-9]{4}", ErrorMessage = "Date should be in the following format: dd-mm-yyyy")]
[MaxLength(10)]
public string Date { get; set; }

[CustomRange(0, 24, ErrorMessage = "Hour must be between 00 and 24")]
public string Hour { get; set; }

[CustomRange(0, 59, ErrorMessage = "Hour must be between 00 and 59")]
public string Minute { get; set; }

.

    public class CustomRangeAttribute : ValidationAttribute
{
public int Min { get; set; }
public int Max { get; set; }


public CustomRangeAttribute(int min, int max)
{
Min = min;
Max = max;
}

public override bool IsValid(object value)
{
var stringValue = Convert.ToString(value, CultureInfo.CurrentCulture);
int tmp;
if(int.TryParse(stringValue, out tmp))
{
return tmp >= Min && tmp <= Max;
}
return false;
}
}

日期部分工作正常,那个是可选的,但它提示的小时和分钟就好像它们有 [必需],那么是否也可以使它们成为可选的?

我改变了所以我改用正则表达式

    [RegularExpression("[0-9]{2}-[0-9]{2}-[0-9]{4}", ErrorMessage = "Date should be in the following format: dd-mm-yyyy")]
[MaxLength(10)]
public string Date { get; set; }

[RegularExpression("[0-1]{1}[0-9]{1}|[2]{1}[0-3]{1}")]
public string Hour { get; set; }

[RegularExpression("[0-5]{1}[0-9]{1}")]
public string Minute { get; set; }

最佳答案

为了满足您对某些字段仅在某些情况下才需要的要求,您可以使用 IValidateableObject 实现自定义验证逻辑

How do I use IValidatableObject?

提供了一个很好的概述

基本上

public MyCustomClass:IValidateableObject
{

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
//your custom "model-wide" business rules here
}
}

至于小时和分钟,您是否有任何理由使用字符串而不是可为空的 int?

[Range(0,24,ErrorMessage="Hour must be between 00 and 24")]
public int? Hour {get; set;}

编辑:好的,现在您已经编辑了您的第一篇文章并包含了您的自定义验证属性,很明显它为什么不起作用

您当前的代码

 public override bool IsValid(object value)     { 
var stringValue = Convert.ToString(value, CultureInfo.CurrentCulture);
int tmp;
if(int.TryParse(stringValue, out tmp))
{
return tmp >= Min && tmp <= Max;
}
return false;
}

每当 value == null 时将返回 false。

添加一个 nullorempty 值的检查是你需要的,即

   public override bool IsValid(object value)     { 
var stringValue = Convert.ToString(value, CultureInfo.CurrentCulture);

if (String.IsNullOrEmpty(stringValue))
{
return true;
}
int tmp;
if(int.TryParse(stringValue, out tmp))
{
return tmp >= Min && tmp <= Max;
}
return false;
}

关于c# - 如何在 asp.net mvc3 中不允许任何属性或某个属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com