gpt4 book ai didi

验证属性 MVC 2 - 检查两个值之一

转载 作者:行者123 更新时间:2023-12-01 11:59:11 25 4
gpt4 key购买 nike

谁能帮我解决这个问题。我想弄清楚如何检查表单上的两个值,必须填写两个项目中的一个。我如何进行检查以确保已输入一个或两个项目?

我在 ASP.NET MVC 2 中使用 View 模型。

这里有一小段代码:

观点:

Email: <%=Html.TextBoxFor(x => x.Email)%>
Telephone: <%=Html.TextBoxFor(x => x.TelephoneNumber)%>

View 模型:

    [Email(ErrorMessage = "Please Enter a Valid Email Address")]
public string Email { get; set; }

[DisplayName("Telephone Number")]
public string TelephoneNumber { get; set; }

我希望提供这些详细信息中的任何一个。

感谢您的指点。

最佳答案

您可以采用与作为 File->New->ASP.NET MVC 2 Web 应用程序的一部分的 PropertiesMustMatch 属性大致相同的方式执行此操作。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EitherOrAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = "Either '{0}' or '{1}' must have a value.";
private readonly object _typeId = new object();

public EitherOrAttribute(string primaryProperty, string secondaryProperty)
: base(_defaultErrorMessage)
{
PrimaryProperty = primaryProperty;
SecondaryProperty = secondaryProperty;
}

public string PrimaryProperty { get; private set; }
public string SecondaryProperty { get; private set; }

public override object TypeId
{
get
{
return _typeId;
}
}

public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
PrimaryProperty, SecondaryProperty);
}

public override bool IsValid(object value)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
object primaryValue = properties.Find(PrimaryProperty, true /* ignoreCase */).GetValue(value);
object secondaryValue = properties.Find(SecondaryProperty, true /* ignoreCase */).GetValue(value);
return primaryValue != null || secondaryValue != null;
}
}

此函数的关键部分是 IsValid 函数,它确定两个参数之一是否有值。

与普通的基于属性的属性不同,它应用于类级别并且可以像这样使用:

[EitherOr("Email", "TelephoneNumber")]
public class ExampleViewModel
{
[Email(ErrorMessage = "Please Enter a Valid Email Address")]
public string Email { get; set; }

[DisplayName("Telephone Number")]
public string TelephoneNumber { get; set; }
}

您应该能够根据需要为每个表单添加尽可能多的这些,但是如果您想要强制他们在两个以上的框之一(例如电子邮件、电话或传真)中输入一个值,那么您将可能最好将输入更改为更多的值数组并以这种方式解析它。

关于验证属性 MVC 2 - 检查两个值之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298072/

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