【问题标题】:ASP.NET MVC data annotations attribute Range set from another property valueASP.NET MVC 数据注释属性范围从另一个属性值设置
【发布时间】:2014-01-09 13:32:12
【问题描述】:

您好,我的 Asp.net MVc 模型中有以下内容

TestModel.cs

public class TestModel
{      
public double OpeningAmount { get; set; }

[Required(ErrorMessage="Required")]
[Display(Name = "amount")]
[Range(0 , double.MaxValue, ErrorMessage = "The value must be greater than 0")]
public string amount { get; set; }

}

现在从我的控制器中分配“OpeningAmount”。

最后,当我提交表单时,我想检查 "amount" 是否必须大于 "OpeningAmonut" 。所以想动态设置 Range 像

[Range(minimum = OpeningAmount , double.MaxValue, ErrorMessage = "The value must be greater than 0")]

我不想只使用 Jquery 或 javascript,因为它只会检查客户端,所以我可以动态设置 Range 属性最小值,而不是这样。

【问题讨论】:

  • 写入属性的数据是“恒定的”,除非您编写自己的自定义元数据提供程序,您可以在其中“调整”这些值。
  • @Murali 我已经浏览了这个链接,但我认为它对我没有用处?
  • @Dilip0165,好的。我正在删除它.. 谢谢:)
  • @Murali 我不是这个意思。保持原样。可能对某人有帮助

标签: c# asp.net-mvc data-annotations


【解决方案1】:

最近有一个惊人的 nuget 可以做到这一点:动态注释,它被称为 ExpressiveAnnotations

它可以让你做一些以前不可能的事情,比如

[AssertThat("ReturnDate >= Today()")]
public DateTime? ReturnDate { get; set; }

甚至

public bool GoAbroad { get; set; }
[RequiredIf("GoAbroad == true")]
public string PassportNumber { get; set; }

【讨论】:

  • 您能告诉我什么时候使用 AssertThat 以及什么时候使用 ExpressiveAnnotations 库使用 RequiredIf 吗?
  • @Thomas 当您想在要装饰的属性上编写业务逻辑验证 时使用AssertThat RequiredIf 是另一回事。当你有一个属性有时需要有数据时使用它(不留空没有值),而有时它可能是空的。何时需要或不需要的逻辑是您在RequiredIf 中编写的内容。
  • 您能否发布一个示例,指导我何时使用 AssertThat 以及何时使用 RequiredIf 使用 ExpressiveAnnotations 库。谢谢
【解决方案2】:

没有内置属性可以处理属性之间的依赖关系。

因此,如果您想使用属性,则必须编写自定义属性。

请参阅 here 以获取您需要的示例。

你也可以看看dataannotationsextensions.org

另一个解决方案是使用验证库,例如(非常好的)FluentValidation。

【讨论】:

  • 我会试一试告诉你
  • 我更喜欢您提供自定义验证的第一个链接。感谢您的支持
  • dataannotationextensions.org 的链接已失效。你知道它们搬到哪里了吗?或者它们是否仍然存在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多