【问题标题】:Add single validation message for multiple fields为多个字段添加单个验证消息
【发布时间】:2015-11-20 08:08:43
【问题描述】:

我有一个类似这样的密码重置页面

我有一个验证来验证最近是否使用过新密码。

要求如果密码最近被使用过,则将新密码和确认密码字段标记为错误并显示验证消息如下。

如何为这两个字段添加一条验证消息?

我试过了

ModelState.AddModelError(newpasswordfieldname, "");
ModelState.AddModelError(confirmpasswordfieldname, AccountResources.FailMinPasswordHistory);

但显示错误“password 的值无效。”用于新密码字段。

除了使用TempData/ViewData,即使用原生表单验证SDK,还有什么方法可以实现吗?

【问题讨论】:

  • 如果我正确理解了您的问题,您只需比较新密码和最近的密码。 comparevalidator 字段怎么样?我不确定在 asp.netMVC 中
  • 验证工作流程运行良好,我面临的唯一问题是显示验证结果
  • 我明白了,为什么不用 jquery 呢?我用它从后面的代码中操作 css,但我还不熟悉 MVC。
  • 您想在两个字段上显示相同的消息吗?
  • 我希望第一个字段中没有错误消息,只需要颜色。

标签: c# asp.net-mvc validation


【解决方案1】:

由于我没有找到使用本机 MVC 验证 SDK 的解决方案,因此我不得不使用一种肮脏的解决方法。

在我的控制器中

ModelState.AddModelError(newpasswordfieldname, "DONOTSHOW");
ModelState.AddModelError(confirmpasswordfieldname, AccountResources.FailMinPasswordAge);

在我看来

@if(ViewData.ModelState["NewPassword"]!=null && 
    ViewData.ModelState["NewPassword"].Errors.First().ErrorMessage!="DONOTSHOW")
{
    @Html.ValidationMessageFor(model => model.NewPassword)
}

【讨论】:

    【解决方案2】:

    您是否尝试使用 AddModelError(String, String) 重载?

    ModelState.AddModelError(newpasswordfieldname, "This password was used too recently");
    ModelState.AddModelError(confirmpasswordfieldname, "This password was used too recently");
    

    向两个属性添加相同的自定义消息。

    【讨论】:

    • 这将显示消息两次。仅供参考,我使用字符串重载。
    • 哦,好的。在这种情况下,可能最简单的方法是使用 jQuery 添加“has-error”类或与输入字段类似的类。您可以发送一个 bool 变量来确定是否需要使用它,或者让它依赖于确认密码道具的错误消息。
    • 或者如果验证消息与另一个相同,则设置为 display:none。或任何这些技巧。
    • 我想到了所有这些,但那些看起来并不那么整洁:)。如果这是唯一的解决方案,我只能将其视为 MVC 框架的短板。
    猜你喜欢
    • 2019-04-28
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2011-09-21
    • 2017-07-04
    相关资源
    最近更新 更多