【问题标题】:Validate form ignoring Required validations验证表单忽略必需的验证
【发布时间】:2017-11-16 20:05:32
【问题描述】:

我需要以 2 种不同的方式提交表单(可能带有 2 个不同的按钮)。

其中一个是普通按钮:它以正常方式验证所有输入及其所有规则。

第二个按钮有点奇怪:它必须验证所有条件,“必需”条件除外。换句话说,它必须忽略必需条件,但不忽略其他条件。

如何覆盖其中一个提交的验证方法?

编辑:我使用 ModelState.IsValid 检查验证是否正确。有什么方法可以覆盖 ModelState 方法以不检查 [Required] 属性?

简而言之:有没有办法让 ModelState.IsValid 只忽略 [Required] 属性?

【问题讨论】:

  • 您的意思是您需要能够验证电话号码是否为数字,但如果需要,您不在乎它是否为空白?
  • 没错,我需要这样的东西。用于验证数据类型和其他业务逻辑的东西,除了 [必需]。但是,我需要其他验证所有的按钮。这就是为什么我需要在字段中保留属性。

标签: c# asp.net forms validation


【解决方案1】:

如果我正在构建它,我会在表单上放置一对单选按钮来设置一个布尔值,以确定我是否在必填字段中强制执行非空白条目。然后,在单击按钮时,如果 enforceReqs 检查必填字段不为空,然后在其后添加一个验证块,验证数据是否有效或为空。比如:

bool enforce = radioEnfoce.Checked
string name = //set name
string phone = //set phone
string address = //set address
string email = //set email

if (enforce)
{
    if (string.IsNullOrEmpty(name) || //Keep checking all required fields.)
    {
        //some error message
        //return?
    }//if required entry is empty.

    //Repeat for all required fields.

}//if enforcing

if ( (!string.IsNullOrEmpty(phone) && !phoneIsValid())
{
    //Do stuff. Entry isn't valid.
}
//Repeat for all input data.

这样您就不必复制/粘贴验证块,因为它允许空白条目,并且可以因为您已经检查了空白(如果您想在这次运行中捕获它们)。

【讨论】:

  • 我使用 ModelState.IsValid 检查所有条件是否有效。可悲的是,使用您的方法,我将不得不忘记 ModelState.IsValid 并手动检查每个条件。这是一项大型工作,因为我需要以多种形式完成它。
  • 啊,是的,我唯一能想到的就是通过删除 modelstate[Required] 并手动检查存在来实现这个逻辑。抱歉,可能帮不上什么忙。
猜你喜欢
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 2019-05-24
相关资源
最近更新 更多