MVC3 将多个字段验证为单个属性

2024-04-24

我正在尝试验证包含两个字段的电话号码。

第一个字段显示区号,另一个字段显示剩余的电话号码数字。

要求是:

  1. 它们都是必需的。
  2. 它们必须是数字。
  3. 区号字段最多为 6 位数字,电话号码字段最多为 10 位数字。

两个字段都需要显示一条消息。例如,如果缺少区号但提供了电话号码,则在两个字段后应显示一条消息,说明“请输入电话号码。”.

我目前拥有的模型类似于:

public class Customer
{
    //...other fields here

    public string AreaCode { get; set; }

    public string PhoneNumber { get; set; }
}

我无法将电话作为具有正则表达式或类似表达式的单个字段来实现。

有一个与此类似的问题here https://stackoverflow.com/questions/6075339/mvc-form-validation-on-multiple-fields(也有点类似于here https://stackoverflow.com/questions/5816313/mvc3-unobtrusive-validation-group-of-inputs)其中答案建议创建一个自定义验证属性(在本例中名为MultiFieldRequired) 指定属性中所需字段的名称。然后,验证属性使用反射来检查其他属性的值,以报告是否存在错误。

例如,在上述模型的情况下,我相信我应该:

public class Customer
{
    //...other fields here

    public string AreaCode { get; set; }

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string PhoneNumber { get; set; }
}

但是,我在提供的解决方案中遇到了一个小问题。自定义验证属性返回的错误仅针对具有数据注释的字段报告(PhoneNumber 是上面的模型)。因此,如果用户未输入区域代码但提供了电话号码,则将根据电话号码字段而不是区域代码报告错误。此外,如果您使用 Visual Studio Internet 项目提供的 CSS,则提供的 PhoneNumber 字段将显示为红色,而无效的区号显示为白色(不显示错误),因此这看起来有点奇怪。

有谁有办法纠正这种着色行为,或者如果任一字段出错(在字段上使用正确的颜色),我可以报告错误消息吗?

先感谢您。


在两者上应用该属性,并且只有一个 ValidationMessageFor(任何人)并将其放置在您想要显示消息的位置(从帖子看来您只需要一条错误消息)。

public class Customer
{
    //...other fields here

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string AreaCode { get; set; }

    [MultiFieldRequired("AreaCode", "PhoneNumber", ErrorMessage="Please enter a phone number")]
    public string PhoneNumber { get; set; }
}

View

    <div class="editor-label">
        @Html.LabelFor(model => model.AreaCode)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.AreaCode)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.PhoneNumber)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.PhoneNumber)
        @Html.ValidationMessageFor(model => model.PhoneNumber)
    </div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC3 将多个字段验证为单个属性 的相关文章

  • nUnit Assert.That委托并发问题

    我的代码中遇到了一些暂时的死锁 无法解决它 简单的代码 我无法创建一个简单的调用链来重现代码InvokeChangeEvent Test public async void Test sut InvokeChangeEvent foo fi
  • 使用正则表达式或其他解析从文件中读取值

    我有一个记录带有时间戳的值的文件 我必须在特定时间后读取特定值 例如 文件有 2013 03 03 19 08 22 car 2001 Ford 2013 03 03 19 08 27 Truck 2012 Chevy 2013 03 03
  • Active Directory:获取用户所属的组

    我想找到用户所属的组列表 我尝试了几种解决方案http www codeproject com KB system everythingInAD aspx http www codeproject com KB system everyth
  • 自定义 ViewEngine ASP.NET MVC 3

    我正在为 ASP NET MVC 的自定义视图引擎寻找最简单的解决方案 这样我就可以超越路径来寻找视图 实际上 我正在尝试在我的解决方案中构建一个主题系统 我查看了网络 但发现了很难学习和实施的解决方案 Thanks 这就是我用的 它在主题
  • C# 中的通用 foreach 循环

    给出以下代码的编译器告诉我 使用未分配的局部变量 x 有什么想法吗 public delegate Y Function
  • Windows 上任何单个进程可以寻址的最大内存量

    Windows 版本的内存限制 http msdn microsoft com en us library windows desktop aa366778 28v vs 85 29 aspx回答 Windows 上任何单个进程可以寻址的最
  • 知识树中的段错误

    我正在用 c 实现一个可以从文件中读取的知识树 我的 newStr 函数出现段错误 我无法用这个问题测试我的其余代码 我对 c 没有太多经验 任何帮助将不胜感激 我的 c 文件 包括 包括 include 动物 h 包括 包括 return
  • Xamarin 中 QR 扫描后的处理对话框

    我在Xamarin应用程序中使用QR码扫描仪 当它扫描QR码时 它会执行一些操作 大约需要一分钟 而在执行操作时 我想在屏幕上显示一个加载对话框 但是 它没有显示在屏幕上 并且在应用程序的其他地方 它运行得很好 Code var expec
  • std::mutex 和 std::shared_mutex 之间的区别

    我遇到了一个std shared mutex in C 17 到底是什么std shared mutex以及它有何不同std mutex 如中所述文档 http en cppreference com w cpp thread shared
  • 只允许在 datagridview 单元格中键入一些字符

    有没有办法只将某些字符添加到 datagridview 单元格中 像 1234567890 据我所知 您可以使用两种方法来实现此目的 第一个 我认为最好的 是使用 CellValidating 事件DataGridView并检查输入的文本是
  • 如何保存具有多个缩进设置的XmlDocument?

    我需要保存一个XmlDocument以适当的缩进归档 Formatting Indented 但有些节点及其子节点必须排在一行 Formatting None 从那时起如何实现这一目标XmlTextWriter接受整个文档的设置 在 Ahm
  • 使用箭头键滚动可滚动控件

    我正在使用一个ScrollableControl在我的 C 项目中 我想知道如何将箭头键映射到垂直 水平滚动 编辑 我的图片框获得焦点 并且我设法映射滚动键 这里的问题是 当我按下箭头键时 它会滚动一次 然后失去焦点 将其交给滚动查看器旁边
  • BackgroundWorker 如何决定在哪个线程上运行 RunWorkerCompleted 处理程序?

    我试图弄清楚 BGW 在工作完成后如何决定运行 RunWorkerCompleted 处理程序的线程 我的初始测试使用 WinForm 应用程序 在 UI 线程上 我开始bgw1 RunWorkerAsync 然后我尝试开始bgw2 Run
  • 绑定到 ListView 项目从视图模型中点击的属性

    我正在尝试使用 itemtapped 属性将事件绑定到菜单页面上的 ListView 目前我在我的应用程序中使用 MVVM Xamarin 表单实验室 框架 我想要完成的是当用户点击菜单项时应用程序导航到正确的视图 这是xaml代码
  • STL迭代器是否保证集合更改后的有效性?

    假设我有某种集合 并且我在它的开头获得了一个迭代器 现在假设我修改了该集合 无论集合或迭代器的类型如何 我仍然可以安全地使用迭代器吗 为了避免混淆 以下是我讨论的操作顺序 获取集合的迭代器 修改集合 显然 不是其中的元素 而是集合本身 使用
  • AZURE:workerrole 中的异步 Run()

    我有一个异步任务 async Task UploadFiles 我想在 azure 工作者角色的 Run 方法中调用 UploadFiles 上的 等待 但 await 仅适用于声明为异步的方法 那么我可以使 Run 方法异步 如下所示 p
  • 制作一个未知大小的数组 C# [重复]

    这个问题在这里已经有答案了 可能的重复 C 中未知长度的数组 https stackoverflow com questions 599369 array of an unknown length in c sharp 我想创建一个程序 用
  • C# StreamReader 使用分隔符保存到数组

    我有一个文本文件 其中包含制表符分隔的数据 我在 C 应用程序中需要的是从文本文件中读取一行并将它们保存到一个数组中 在每个位置将它们分开 t 然后我对下一行做同样的事情 My code StreamReader sr new Stream
  • 提高大型结构列表的二进制序列化性能

    我有一个以 3 个整数保存 3d 坐标的结构 在测试中 我将 100 万个随机点放在一起 List 然后对内存流使用二进制序列化 内存流大小约为 21 MB 这似乎非常低效 因为 1000000 点 3 坐标 4 字节应该至少为 11MB
  • JSON.NET 序列化 JObject,同时忽略 null 属性

    我有一个JObject它被用作template用于调用 RESTful Web 服务 这JObject通过解析器创建 并且由于它用作模板告诉用户端点架构是什么样子 所以我必须找到一种方法来保留所有属性 这就是为什么我将它们的值默认为null

随机推荐

  • 在 Linux 中生成相同的数字,但在 Windows 中则不然

    下面的代码旨在生成区间 1 100 中的五个伪随机数的列表 我播种default random engine with time 0 它返回系统时间UNIX时间 https en wikipedia org wiki Unix time 当
  • 与 Post 进行交叉呼叫,但在飞行前失败

    我必须从我的网站向第三方域 服务器进行网络服务调用 当我使用 jQuery Ajax by Post 方法和 content type text plain 进行此调用时 它工作正常 但是 当我将其更改为 content type text
  • 如何隐藏 WPF ListView 的标头?

    我希望能够隐藏 WPF ListView 中每个网格列顶部的标题 这是我的 ListView 的 XAML
  • 在同一 URL 上运行 SOAP 和 RESTful

    假设我们有一个响应主机标头 kebab shop intra net 的网站 此 URL 中是否可以同时包含 SOAP 和 RESTful 也就是说 这两者都是在已部署的代码中处理的 kebab shop intra net takeawa
  • 在我的绘画程序中绘制矩形时出现错误

    public partial class Form1 Form Point downPoint upPoint List
  • iPhone HTML5 音频标签不起作用

    我遇到了音频标签无法在 iPonhe 上工作的问题 在 W3Schools 网站上测试时它可以播放 HTML5 音频标签 但不适用于我下面的网站
  • 使用 awk 添加列。这个 awk 命令有什么问题?

    我想将两列添加到大约 10 000 列的文件中 我想在每行插入 nr 22 作为第一列 然后我想要将原始第一列作为第二列 然后作为第三列我想要插入第 nr NR 行 之后我想要打印其余的原始列 我想我可以用下面的 awk 行来做到这一点 a
  • Google 地图 API - 添加多个目的地不起作用(谷歌方向)

    我在创建 复制谷歌地图方向功能时遇到问题 当我有 从 到 字段时 我可以让它正常工作 但一旦我尝试添加多个目的地 它就不起作用 我看过我们 但我没有得到任何很好的示例教程来展示这是如何完成的 以下是我到目前为止所做的事情 但我很确定这件事做
  • Mac 上 Docker 内的 Xdebug 无法工作

    我将本地开发设置从 Linux 移植到新的 Mac 机器 但在让 Xdebug 在 Mac M1 Pro 机器中与 PhpStorm 配合使用时遇到问题 我有一个包含 PHP 的容器 其中 Xdebug 安装并配置如下 zend exten
  • 安装APK时缺少lib文件夹

    我想知道如何构建我的 APK 以便我的库安装 复制到 data data
  • Rails 开发服务器、PDFKit 和多线程

    我有一个 Rails 应用程序 它使用 PDFKit 来呈现网页的 pdf 版本 我使用 Thin 作为开发服务器 问题是当我处于开发模式时 当我使用 bundle execrails s 启动服务器并尝试渲染任何 PDF 时 整个过程陷入
  • “实例显示状态”无法编译

    这是我试图弄清楚的 State Monad 代码 data State a State Int gt a Int instance Monad State where return x State c gt x c State m gt g
  • 如何忽略 Eclipse 中特定类型的未捕获异常?

    我在我的 Java 应用程序中使用第三方库 这个第三方库在每次应用程序启动时都会引发自定义的未捕获异常 该异常是无害的 仅用于第三方库内部记录的目的 由于未捕获此异常 它会导致我的 Eclipse IDE 切换到调试视角 并在每次启动应用程
  • D3:打字机风格的文本过渡

    In this jsfiddle http jsfiddle net VividD QbysN 标签通过减小旧文本的字体 然后增加新文本的字体 从一个文本过渡到另一个文本 但是 我希望新文本以 打字机 方式出现 就像这样jsfiddle h
  • Angular 应用程序仅在 IE11 上抛出语法错误

    我有 Angular 应用程序 该应用程序仅适用于 IE11 我已经设置了polyfills import core js es6 symbol import core js es6 object import core js es6 fu
  • 复制构造函数创建依赖副本

    我按照描述实现了复制构造函数here https stackoverflow com questions 15020850 copy constructors and defensive copying 但问题仍然是当我更新时route c
  • 带图像背景的 Outlook 2013 HTML 签名

    我找到了另一个线程 Outlook 2013 背景图像损坏 https stackoverflow com questions 22613230 outlook 2013 background image broken 但是我无法发表评论
  • Pod 清单写入 Deployment Manifest

    在 Kubernetes 中 将正在运行的 pod 清单转换为具有 x 个副本的部署的简单方法是什么 我尝试获取清单 k get po xyz o yaml gt po1 yaml 然后编辑 yaml 并与部署清单匹配 但这似乎并不容易 我
  • 如何替换 randomForest r 包中的引导步骤

    首先是一些背景信息 这在 stats stackexchange 上可能更有趣 在我的数据分析中 我尝试比较不同机器学习方法在时间序列数据上的性能 回归 而不是分类 例如 我训练了一个 Boosting 训练模型 并将其与随机森林训练模型
  • MVC3 将多个字段验证为单个属性

    我正在尝试验证包含两个字段的电话号码 第一个字段显示区号 另一个字段显示剩余的电话号码数字 要求是 它们都是必需的 它们必须是数字 区号字段最多为 6 位数字 电话号码字段最多为 10 位数字 两个字段都需要显示一条消息 例如 如果缺少区号