【问题标题】:How to detect whether Data Annotations validations were unsuccessful?如何检测数据注释验证是否不成功?
【发布时间】:2016-02-15 20:15:53
【问题描述】:

我有一个 ASP.NET MVC 页面,其中包含这样的字段...

@Html.TextBoxFor(model => model.MyField, new { @class = "form-control",  data_val_required = "Required field" })

另外,我有一个从表单的“onsubmit”事件调用的 JavaScript 验证函数...

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { @onsubmit = "return validateDeep();" }))

我需要检测数据注释验证是否成功。我调查并发现了“Page_IsValid”变量,不幸的是它总是未定义。

function validateDeep()
{
   var errors = "";
   if (!Page_IsValid) // this fails, also this: document.Page_IsValid
       errors = errors + "- There are empty fields (marked in red color)<br/>";

   errors = errors +  getOtherValidationErrors();

   if (errors != "") {
      openAlert("ERRORS!<br/>" + errors);
      return false;
   }

   return true;
}

那么,问题是......如何检测那些在客户端和 Post 之前的数据注释验证不成功?

【问题讨论】:

  • 您想在服务器中了解它吗? var isValid = ModelState.IsValid ?
  • 所以你不能使用像[Required]validate them using jQuery这样的标准属性?
  • 这是在客户端级别 (JavaScript)。无法将验证更改为 [Required] 属性,因为项目中已有许多表单。
  • 如果您没有[Required] 属性并且没有包含jquery.validate.jsjquery.validate.unobtrusive.js,您认为添加data_val_required = "Required field" 会做什么?

标签: javascript asp.net-mvc validation


【解决方案1】:

-- 删除错误答案--

我的第一个答案是错误的,我现在这样理解 OP 的场景:

  • 表单已发布到服务器
  • 服务器返回表单因为ModelState.IsValid == false
  • 页面呈现错误并提供给客户端
  • 如何检测客户端上的现有错误?

如果您使用@Html.ValidationSummary() 呈现错误,生成的标记将如下所示[1]

<span style="font-family: inherit;"><div class="validation-summary-errors" data-valmsg-summary="true">
        <ul>
           <li>List of error messages ...</li>
        </ul>
   </div> 
</span>

所以data-valmsg-summary="true" 告诉我们存在验证错误,即数据注释验证不成功。

 // using jQuery 1.7.2
 var invalid = $('.validation-summary-errors').data('valmsg-summary');
 if (invalid) {
     // some javascript ...
 }

【讨论】:

  • 我不想重新验证、附加和学习其他库。我想知道 ASP.NET MVC 5 已经存在的验证结果。
  • 对不起,我误解了你的问题。您想检查服务器是否在往返后发现任何错误。我们通过搜索 ValidationSummary HTML Helper 呈现的 HTML 来做到这一点。
  • 这发生在表单发布之前(验证)。请注意,该函数是从 onsubmit 事件中调用的,只有在返回值为 true 时才会发布帖子。感谢您的尝试。
【解决方案2】:

已解决:基于 data-val-required 的验证可以用这个来评估...

var form = $("#MyForm");
if (!form.valid())
    alert("You have incomplete/invalid values, please correct them");

此验证基于“不显眼”的 JQuery 验证,而不是基于 ASP.NET MVC 数据注释验证。

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 2010-12-06
    • 2016-06-21
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多