【问题标题】:asp.net mvc client side validation on multiple forms in one page一页中多个表单的asp.net mvc客户端验证
【发布时间】:2023-03-09 17:10:01
【问题描述】:

我的 asp.net mvc 视图中有 4 个表单。我通过将<% Html.EnableClientValidation(); %> 放在每个表单的Html.BeginForm() 上方来启用客户端验证。问题是,无论我是否为表单指定了 ID,只要我单击其他表单的提交,页面上的第一个表单就会得到验证。

是否支持这种用法还是我做错了什么?

【问题讨论】:

    标签: asp.net asp.net-mvc validation


    【解决方案1】:

    这可能会有所帮助

                    <%=Html.ValidationMessageFor(m => ((RegistrationFormModel)m.Data).Email, null, new { id = "registration_Email" })%>
    

    【讨论】:

    • 也就是说,您只需为生成的字段指定一个自定义 id。炒锅很好。
    • 谢谢,当在部分中使用相同的表单来添加新数据和编辑现有数据时,这让我摆脱了束缚。只是添加了一个简单的检查来查看主键是否为 0(即新数据),并为它们添加了一个自定义 id。
    【解决方案2】:

    确保您有属性的验证消息。除非您有验证消息或 (ValidateFor()),否​​则该属性不会添加到表单提交时验证的元素集中。

    请参阅此question 了解更多信息。

    【讨论】:

    • 我正在使用 Html.ValidationMessageFor
    • 客户端验证适用于一个表单,但只要我每次在其他表单上单击提交时添加更多表单,页面上的第一个表单就会被验证。
    • 嗯。看起来它只生成一组验证元数据。您可能需要使用一些备用客户端验证。
    【解决方案3】:

    MVC2 完全支持您正在寻找的设置,我猜您将其应用于诸如在同一页面上显示注册表单和登录表单之类的东西?

    如果是这样,您只需要每个表单都有独立的属性名称,即

    LoginModel 有一个 Username 属性,RegistrationModel 有一个 RegistrationUsername。

    那里不是一个很好的例子,但可能发生的是验证正在触发交叉表单,因为您的属性具有相同的名称。

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多