以编程方式更改验证范围 (MVC3 ASP.NET)

2023-11-27

假设我有这个视图模型:




    public class MyModel
    {
        [Range(0, 999, ErrorMessage = "Invalid quantity")]
        public int Quantity { get; set; }
    }

  

现在,对于该模型的特定实例,有效值的范围将发生变化:有些可能不为 0,有些可能不高于 5。有效范围的最小/最大值来自数据库,并且可以随时更改。

如何动态更改 RangeAttribute 的最小/最大属性?或者验证我的场景的最佳方法是什么?


类似的事情可能更符合您的需求......

视图模型:

public class ViewModel
{
    public DateTime MinDate {get; set;}
    public DateTime MaxDate {get; set;}

    [DynamicRange("MinDate", "MaxDate", ErrorMessage = "Value must be between {0} and {1}")]
    public DateTime Date{ get; set; }
}

图书馆类或其他地方:

public class DynamicRange : ValidationAttribute, IClientValidatable
    {
        private readonly string _minPropertyName;
        private readonly string _maxPropertyName;

    public DynamicRange(string minPropName, string maxPropName)
    {
        _minPropertyName = minPropName;
        _maxPropertyName = maxPropName;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var minProperty = validationContext.ObjectType.GetProperty(_minPropertyName);
        var maxProperty = validationContext.ObjectType.GetProperty(_maxPropertyName);

        if(minProperty == null)
            return new ValidationResult(string.Format("Unknown property {0}", _minPropertyName));

        if (maxProperty == null)
            return new ValidationResult(string.Format("Unknown property {0}", _maxPropertyName));

        var minValue = (int) minProperty.GetValue(validationContext.ObjectInstance, null);
        var maxValue = (int) maxProperty.GetValue(validationContext.ObjectInstance, null);

        var currentValue = (int) value;

        if (currentValue <= minValue || currentValue >= maxValue)
        {
            return new ValidationResult(string.Format(ErrorMessage, minValue, maxValue));
        }

        return null;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
            {
                ValidationType = "dynamicrange",
                ErrorMessage = ErrorMessage
            };

        rule.ValidationParameters["minvalueproperty"] = _minPropertyName;
        rule.ValidationParameters["maxvalueproperty"] = _maxPropertyName;
        yield return rule;
    }

From: MVC 动态值的不引人注目的范围验证

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式更改验证范围 (MVC3 ASP.NET) 的相关文章

  • React-hook-form 文本字段的条件验证,基于是否选中另一个复选框?

    我正在尝试向文本字段添加验证规则 如果选中表单中的单独复选框 则该字段必须是非空字符串才能提交表单 这是我到目前为止所拥有的内容的链接 https codesandbox io s magical hypatia n7o5w https c
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • 具有 ASP.NET Identity 的 MVC 5 - 用户登录时获取声明

    我正在使用 OWIN 2 0 在登录用户后 我想从数据库中检索现有的声明 但如果我尝试获取用户的声明 它们将为空 如果我将相同的代码放入任何被调用的后续控制器中 那么声明就在那里 似乎只有在首次登录后的下一个请求之前 这些声明才可用 为什么
  • 从mvc url中隐藏一个控制器名称,显示其他控制器名称

    我有两个控制器 HomeController 和 ResourcesController 当请求对 HomeController 执行操作时 我想从 url 中隐藏 Home 但对于 ResourcesController 或任何其他 co
  • WinForms 验证事件阻止 Escape 键关闭表单

    我有一个简单的表单 带有一个文本框 加上 确定 和 取消 按钮 表单的 AcceptButton 和 CancelButton 设置正确 并且 确定 和 取消 按钮的 DialogResult 设置为 确定 和 取消 我想向 TextBox
  • C# SMTP 身份验证失败,但凭据正确

    这是我的问题 我编写了以下程序来测试是否可以发送电子邮件 class Program static void Main string args try Console WriteLine Mail To MailAddress to new
  • 每 4 个循环新表行

    如何在 Razor 视图中每 4 个循环创建一个新表行 这是为 4 之前的每个数字创建一个新行 然后停止创建新行 int i 0 foreach var item in ViewBag ProgramIdList if i 4 0 tr t
  • 显示 PDF ASP.Net MVC

    我的桌面上有一个文件用于测试 我试图在如下视图中显示它 ViewBag Title ShowFile h2 ShowFile h2 我用于控制器的代码是 HttpGet public ActionResult ShowFile string
  • ASP.NET MVC 显示配置文件中的用户名

    以下是LogOn来自 Visual Studio 创建的标准默认 ASP NET MVC 项目的用户控件 登录用户控件 ascx Welcome b b
  • IIS 7 错误:无法执行程序。正在执行的命令是 csc.exe(ApplicationPoolIdentity 默认设置)

    这是我的第一个问题 如果我有一些语法错误 请向我道歉 问题描述 我在多台服务器上安装了运行在 IIS 7 Windows Server 2008 和 SQL Server 2008 R2 上的基于 32 位 MVC 5 的 CRUD 系统
  • 如何为客户端和服务器缓存设置不同的缓存过期时间

    我想让某些页面为客户端提供 10 分钟缓存 为服务器提供 24 小时缓存 原因是如果页面发生变化 客户端将在 10 分钟内获取更新版本 但如果没有任何变化 服务器只需每天重建一次页面 问题在于输出缓存设置似乎覆盖了客户端设置 这是我的设置
  • asp.net mvc 4 - 可以在每个线程共享 DbContext 吗?

    From 每个 Web 请求一个 DbContext 为什么 https stackoverflow com questions 10585478 one dbcontext per web request why 我的理解是 DbCont
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • 多语言标记验证器

    是否有免费的在线多语言标记验证服务可以正确识别和验证多语言标记 我确实找到了totalvalidator和htmlvalidator 但这些是 付费 非基于网络的解决方案 Use http validator w3 org nu http
  • asp.net mvc:将 RedirectToAction(string, object) 转换为 RedirectToAction(x => x.Detail(id))

    任何人都知道如何创建一个方法 我将把它放在扩展类中 该方法将仅使用表达式 无魔术字符串 与 mvc 的 RedirectToAction 执行相同的操作 所以不要写这样的东西 RedirectToAction Detail new Rout
  • ASP.NET MVC 应用程序中的工作单元模式

    我一直在看这个优秀的blog http www nhforge org wikis patternsandpractices nhibernate and the unit of work pattern aspx标题为 NHibernat
  • Visual Studio 智能感知搞砸了

    所以我是 MVC4 和 C 的新手 我已经设计这个网站大约两周了 智能感知没有任何问题 两天来 Visual studio 告诉我 Viewbag 和其他 命令不是我的项目的一部分 我可能错过了一些东西 或者它告诉我 Viewbag 在当前
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • Angular 模板验证表单

    我正在研究表单验证 我正在使用模板驱动的验证表单 其编码如下 现在工作正常 但是当我尝试添加时 username ngModel and password ngModel 在创建验证类的输入中 它向我显示一个错误 也请找到该错误 div c

随机推荐

  • 定义 (1 << 31) 还是使用 0x80000000?结果不同

    define SCALE 1 lt lt 31 define fix Q31 80 x int float x float 0x80000000 define fix Q31 SC x int float x float SCALE int
  • PHP 货币格式

    我正在使用money format第一个参数是 n 包括美元符号 并且我将区域设置设置为en US但它仍然不包括它 为什么 来自PHP net评论 如果 Money format 似乎不是 工作正常 请确保您 定义有效的语言环境 例如 在
  • 如何延迟Default.png?

    如何延迟应用程序加载以更长时间地显示启动屏幕 您应该让应用程序照常启动 然后使出现的第一个视图具有与初始屏幕相同的图像 启动计时器 然后在几秒钟后将该视图替换为真实的应用程序根视图 故意推迟实际的应用程序启动是一个很大的禁忌
  • Tomcat 服务使用“本地服务”帐户安装

    在 Tomcat 8 0 53 之后 当我安装 Tomcat 9 0 30 或 8 5 50 并将其安装为服务 使用 service bat 时 它会被安装 但 登录 为 本地服务 而不是 本地系统 帐户 这可以在windows的服务下看到
  • 个人存储库与中央存储库

    我正在尝试设置版本控制软件 目前我独自工作 但我希望这种情况会改变 并且我想将代码存储在定期备份的网络驱动器上 但在笔记本电脑的硬盘驱动器上处理相同的代码 但 GIT 让我很困惑 因此 据我所知 我应该在笔记本电脑上创建一个个人存储库 然后
  • 带身份验证的 Python 请求(access_token)

    我正在尝试在 Python 中使用 API 查询 从命令行我可以使用curl像这样 curl header Authorization access token myToken https website example id 这会给出一些
  • Spring在运行时选择bean实现

    我使用带有注释的 Spring Bean 并且需要在运行时选择不同的实现 Service public class MyService public void test 例如对于windows平台我需要MyServiceWin extend
  • 如何在MySql中的DATETIME字段的日期部分创建索引

    如何在 DATETIME 字段的日期部分创建索引 mysql gt SHOW COLUMNS FROM transactionlist Field Type Null Key Default Extra TransactionNumber
  • 可串行化和瞬态

    为了使类可序列化 我们执行以下操作 class A implements Serializable transient Object a 而不是这个 serializable class A transient Object a 为什么 如
  • Xcode 卡在索引上

    我工作了 2 个月的一个项目无缘无故停止工作 因为 Xcode 卡在 索引 上 我无法再构建该项目了 如果我尝试构建 Xcode 就会冻结 我必须强制退出 这种情况仅发生在该项目中 我尝试清理所有派生数据 但没有帮助 我正在使用 Xcode
  • 如何使用 System.out.println 在控制台中打印颜色?

    如何在控制台中打印颜色 我想在处理器发送数据时以颜色显示数据 在接收数据时以不同的颜色显示数据 如果您的终端支持 您可以使用ANSI 转义码在输出中使用颜色 它通常适用于 Unix shell 提示符 但是 它不适用于 Windows 命令
  • Express.js 路由:可选 splat 参数?

    我有一条看起来像这样的路线 app all path namedParam splat function req res next if req params length do something when there is no spl
  • PHP 子字符串提取。获取第一个“/”之前的字符串或整个字符串

    我正在尝试提取一个子字符串 我需要一些帮助来用 PHP 来做这件事 以下是我正在使用的一些示例字符串以及我需要的结果 home cat1 subcat2 gt home test cat2 gt test startpage gt star
  • 单元测试:使用酶反应上下文 api 返回一个空对象

    我第一次尝试使用 React context API 将信息从主组件传递到孙组件 所以首先我创建了一个上下文 const MyContext React createContext export default MyContext 这是设置
  • 打印 F# 歧视联合

    我正在编写一个 F 程序 它将字符串解析为 AST 类型 这是一个可区分的联合 当我使用fsi 在 Mono Mac OS X 上 运行我的代码 AST 以良好的格式打印出来 但是当我使用printfn s lt ast ToString
  • 用于匹配不包含单词的行的正则表达式

    我有以下几行 Message Polarion commit Mon May 18 06 59 37 CEST 2009 Message Polarion commit Fri May 15 19 39 45 CEST 2009 Messa
  • 在 Haskell 中运行并行 URL 下载

    下面是 Haskell 代码 它 HTTP 下载给定目录中缺少的文件 module Main where import Control Monad filterM liftM import Data Maybe fromJust impor
  • Android NDK:dlopen 失败

    我有一个奇怪的错误 它说 java lang UnsatisfiedLinkError dlopen failed cannot find obj local armeabi v7a libsharedlibrary so from ver
  • 从 GitHub 页面提交 formspree.io 时出错

    我在 GitHub 页面上托管一个网站 当我尝试提交 formspree io 表单时 出现以下错误 这是我的代码
  • 以编程方式更改验证范围 (MVC3 ASP.NET)

    假设我有这个视图模型 public class MyModel Range 0 999 ErrorMessage Invalid quantity public int Quantity get set 现在 对于该模型的特定实例 有效值的