gpt4 book ai didi

c# - ASP.NET MVC。如何禁用基于参数的必需验证?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:21 24 4
gpt4 key购买 nike

我确实有一个实体类,其中包含一些必需的属性,具体取决于选择器。

例如:选择器可以假定为“1”或“2”。如果选择器为“1”,则需要一组参数。如果选择器为“2”,则需要另一组参数。

class MyClass{

public int Selector {get;set;} // 1 or 2

public string A_required_for_1 {get;set;}
public string B_required_for_1 {get;set;}

public string C_required_for_2 {get;set;}
public string D_required_for_2 {get;set;}

public string E_Required_for_both_selectors {get;set;}

}

用户应该能够在 View 中创建或编辑操作期间在选择器之间切换。

客户端验证已经解决。

如何在服务器验证中处理它?<​​/p>

最佳答案

您可以创建自己的自定义验证属性或使用 MVC Foolproof Validation然后做:

class MyClass
{

public int Selector {get;set;} // 1 or 2

[RequiredIf("Selector == 1", ErrorMessage = "Your Error Message")]
public string A_required_for_1 {get;set;}

[RequiredIf("Selector == 1", ErrorMessage = "Your Error Message")]
public string B_required_for_1 {get;set;}

[RequiredIf("Selector == 2", ErrorMessage = "Your Error Message")]
public string C_required_for_2 {get;set;}

[RequiredIf("Selector == 2", ErrorMessage = "Your Error Message")]
public string D_required_for_2 {get;set;}

[Required("Your Error Message")]
public string E_Required_for_both_selectors {get;set;}

}

正如 Win 所提到的,它似乎已经有一段时间没有积极开发了,所以您可能想沿着创建自己的自定义验证属性的路线走下去,这确实需要更多的工作,但您可以更好地控制验证本身。根据您的需要选择。

对于自定义验证属性,您可以这样做:

public class RequiredIfOtherProperty : ValidationAttribute
{
private readonly string _otherPropertyName;
private readonly string _compareValue;

public RequiredIfOtherProperty(string otherPropertyName, string compareValue)
{
_otherPropertyName = otherPropertyName;
_compareValue = compareValue;
}

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var otherProperty = validationContext.ObjectType.GetProperty(_otherPropertyName);
if (otherProperty == null)
{
return new ValidationResult($"Property '{_otherPropertyName}' does not exist");
);

var otherPropertyValue = otherProperty.GetValue(validationContext.ObjectInstance, null);
if (!_compareValue.Equals(otherPropertyValue))
{
return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
}

return null;
}
}

它应该让您大致了解您可以做什么,并且您可以将实际验证更改为您喜欢的任何方式。然后您可以像普通属性一样使用它,例如

[RequiredIfOtherProperty("SomeProperty", "ValueToCompareWith")]

关于c# - ASP.NET MVC。如何禁用基于参数的必需验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662370/

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