MVC 3 模型验证问题 - 疏忽或有意为之

2024-01-06

我遇到了一个场景,我需要知道当前正在验证哪个属性在一个习惯中ValidationAttribute。我认为这在 MVC 3 中会很容易,因为ValidationContext正在被传递到IsValid http://msdn.microsoft.com/en-us/library/dd730022%28v=VS.100%29.aspx method.

无需详细说明,以下是基本思想:

protected override ValidationResult IsValid(Object value, ValidationContext validationContext) {

   if (ShouldICareAboutYou(validationContext.MemberName))
   {
       //Do some stuff
   }

   //Return the results
}

这似乎是完美的解决方案,事实上,当使用单元测试我的自定义 ValidationAttribute 时Validator.TryValidateObject http://msdn.microsoft.com/en-us/library/dd411772%28v=vs.95%29.aspx一切都很顺利!

然而...

打电话时TryUpdateModel http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel.aspx, or TryValidateModel http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryvalidatemodel.aspx在我的控制器中,验证运行,但是ValidationContext.MemberName一片空白。

哇哈?!?

我做了一些调查,果然,就在里面DataAnnotationsModelValidator http://msdn.microsoft.com/en-us/library/system.web.mvc.dataannotationsmodelvalidator.aspx是代码...还是缺少代码。

public override IEnumerable<ModelValidationResult> Validate(object container) {
    // Per the WCF RIA Services team, instance can never be null (if you have
    // no parent, you pass yourself for the "instance" parameter).
    ValidationContext context = new ValidationContext(container ?? Metadata.Model, null, null); 
    context.DisplayName = Metadata.GetDisplayName();

    // Setting the MemberName here would be trivial!
    // However, philh told me not to. Something about
    // a guy named Josh who pushed him down on the playground
    // in middle school.

    //context.MemberName = Metadata.PropertyName; (Suck It, Josh!!!)

    ValidationResult result = Attribute.GetValidationResult(Metadata.Model, context); 
    if (result != ValidationResult.Success) {
        yield return new ModelValidationResult { 
            Message = result.ErrorMessage
        };
    }
} 

我意识到DisplayName could如果没有则为属性名称DisplayAttribute已应用于该物业。不幸的是我不能真正处理假设。我需要知道exactly属性名称是什么。

那么到底是怎么回事呢?这是有意为之还是出于诚实的疏忽。如果这是一个疏忽,那么在 MVC 4 中修复这个问题就太棒了:)

免责声明:

The added上面代码示例中的注释是为了搞笑。我不知道,也没有遇见过菲尔·哈克 http://haacked.com/articles/AboutHaacked.aspx。据我所知,他看起来是一个非常好的人。如果在中学时把他推倒的话,我就会成为一个皇家混蛋!


我遇到了同样的问题,决定将属性名称作为参数传递到属性构造函数中,然后将其存储在属性中。例如:

[MyValidationAttribute("MyProperty")]
public string MyProperty { get; set; }

然后在 MyValidationAttribute.cs 中:

public class MyValidationAttribute
{
    private string PropertyName;

    public MyValidationAttribute(string propertyName)
    {
        this.PropertyName = propertyName;
    }
}

现在我必须输入财产名称两次,这有点烦人,但它解决了问题。

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

MVC 3 模型验证问题 - 疏忽或有意为之 的相关文章

  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 一个模型可以通过多个编辑器模板传递吗?

    我尝试使用编辑器模板显示视图模型 该模板在应用基本对象编辑器模板之前将模型包装在字段集中 My view model Mvc3VanillaApplication Models ContactModel using Html BeginFo
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 我如何将整数列表添加到路由

    我正在尝试将 int 数组添加到我的 Url Action 中 如下所示 var routeData new RouteValueDictionary for int i 0 i lt Model GroupsId Length i rou
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 求调用存储过程的合法例子C#:MYSQL

    我花了大约 7 个小时试图通过反复试验来解决这个问题 我看到的所有在线示例要么不起作用 要么不适用 或者只显示我正在寻找的一半 这就是我的要求 1 MYSQL 中使用 1 个 IN 参数和 1 个 OUT 参数的简单存储过程示例 2 使用
  • 如何使用asyncio创建TCP代理服务器?

    我在 asyncio 上找到了这些 TCP 客户端和服务器的示例 TCP 服务器示例 https docs python org 3 library asyncio protocol html tcp echo server protoco
  • 在 Sails.JS 中持久化之前添加缺少的请求参数

    是否可以 插入 丢失的参数 如果未发送 以便通过以下方式将它们全部保留req params all 目前正在尝试这样做 让我no method setParameter error 万一有人需要这个 我只需要处理一个类似的问题 在流程到达控
  • Xamarin.Auth:应用程序更新时帐户数据不会保留

    我正在使用 Xamarin Auth 通过 foursquare 等服务进行身份验证 我的身份验证代码运行良好 问题是当我部署新版本的应用程序时 帐户数据不会保留 每次我在手机上部署测试版本时 我都必须重新进行身份验证 这是我存储帐户的方式
  • 按行排序,然后连接数据框的特定列

    有关的question https stackoverflow com questions 6308933 r concatenate row wise across specific columns of dataframe这不包括排序
  • 阻止 iPhone 应用程序在 iPad 上运行

    我正在发送两个二进制文件 一个用于 iPhone iTouch 另一个用于 iPad 这是同一个应用程序 Apple 是否会确保用户永远不会在 iPad 上收到 iPhone 版本的应用程序 如果是 那么我就没有什么可担心的 但如果不是 那
  • Python 有匿名类吗?

    我想知道 Python 是否有类似 C 匿名类功能的东西 为了澄清这一点 这里有一个示例 C 代码片段 var foo new x 1 y 2 var bar new y 2 x 1 foo Equals bar true 在Python中
  • 这个类型签名发生了什么? (Haskell 中的 Vector.Mutable 修饰符)

    Haskell 中的可变向量具有三个元素级变异器 read PrimMonad m gt MVector PrimState m a gt Int gt m a write PrimMonad m gt MVector PrimState
  • 您知道哪些 GUI 可用性指标?

    当然 最好的衡量标准是用户的幸福感 但是您知道 GUI 可用性测量的哪些指标呢 例如 常见指标之一是执行操作的平均点击次数 您还知道哪些其他指标 Jakob Nielsen 有几篇关于可用性指标的文章 其中一篇标题为 嗯 可用性指标 htt
  • 返回线性矩阵方程的最小二乘解的函数

    我一直在尝试将代码从 Python 重写为 Swift 但我被困在应该返回线性矩阵方程的最小二乘解的函数上 有谁知道用 Swift 编写的库 它具有与numpy linalg lstsq http docs scipy org doc nu
  • 如何为 django-taggit 创建列表和详细视图?

    我有一个相当简单的模型 使用 Django Taggit 进行标记 一切都很好 但现在我想扩展一些功能 但我有点困惑 我想要的是两种观点 显示我在系统中的所有标签的一个 显示我的应用程序中带有特定标签的所有内容的一个 对我来说有意义的是对每
  • 在活动目录中查找计算机

    当我使用 dsa msc 手动搜索计算机并打开其属性时 会出现一个 位置 选项卡 它可能有也可能没有价值 当我尝试使用 Net 的目录服务获取此信息时 我没有看到 位置 属性 我打印了所有可用的属性 但没有看到它 它只是不可用还是我错过了一
  • 带有节点的分类视图

    使用 Drupal 6 我尝试创建一个包含如下视图的页面 分类术语 1 包含该术语的节点的标题和描述 包含该术语的节点的标题和描述 分类学术语 2 包含该术语的节点的标题和描述 包含该术语的节点的标题和描述 分类学术语 3 包含该术语的节点
  • 弱阻力和强阻力有什么区别

    我读过一些关于强抗碰撞性和弱抗碰撞性的文章 但我无法理解其中的区别 我唯一能理解的是 具有弱抗碰撞性的哈希函数发生碰撞的概率较低 而具有强抗碰撞性的哈希函数发生碰撞的概率较高 我无法理解什么是真实的东西 这些参数的意义是什么 谁可以帮我这个
  • 按组选择事件首次发生之前的行

    我有一系列的观察结果 描述了是否以及何时在特定区域发现动物 下面的示例表标识了何时看到某种动物 status 1 或不 status 0 白天 id date status 1 1 2014 06 20 1 2 1 2014 06 21 1
  • CMake路径错误

    我正在尝试为 kinect 演示构建 Visual Studio 项目 rgbddemo http nicolas burrus name index php Research KinectRgbDemoV5 根据页面上的说明 我需要设置
  • 如何获得向量中函数的多个输出?

    假设我有一个函数 其输出是两个实数 a 和 b a b function c 我想获得向量 v 中的所有输出 v function c 没有执行我想要的操作 v 只是 a 当然这里我可以做v a b 但所讨论的函数是 N 维数组的 ind2
  • Ionic 1 推送通知

    有人有 ionic 1 推送通知的经验吗 他们建议的云解决方案有其他替代方案吗 有人可以展示实施示例吗 请记住 我对 ionic 完全陌生 我用这个插件https github com phonegap phonegap plugin pu
  • 如何在 asp.net mvc 3 项目中路由 .aspx 页面?

    我在以下路径中有一个 aspx 页面 Areas Management Views Ticket Report aspx 我想将其路由到浏览器中的以下路径 http localhost Reports Tickets 我怎样才能做到这一点
  • MVC 3 模型验证问题 - 疏忽或有意为之

    我遇到了一个场景 我需要知道当前正在验证哪个属性在一个习惯中ValidationAttribute 我认为这在 MVC 3 中会很容易 因为ValidationContext正在被传递到IsValid http msdn microsoft