Asp.net-Mvc

ASP.net MVC 驗證鉤子

  • April 26, 2015

我在 ASP.net MVC 3 中有以下視圖:

@model Models.CreateProjectViewModel

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

@using( Html.BeginForm() ) {
   @Html.TextBoxFor(m => m.ProjectName)
   @Html.ValidationMessageFor(m => m.ProjectName)

   <p>
       <input type="submit" value="Save" />
   </p>
}

我正在使用帶有 jQuery 和 Fluent Validation 框架的不顯眼的 javascript。

當我點擊“保存”按鈕並且驗證失敗時,是否有一些事件可以掛鉤來呼叫一些自定義 javascript?

function validationFailed() {
   // do something here only if validation failed
}

我將如何綁定驗證,以便在它失敗時(並且只有在它失敗時)我可以呼叫我的 validationFailed() 函式。

您可以使用invalidHandler,我相信這是在 jquery 驗證中。

invalidHandler Callback

送出無效表單時自定義程式碼的回調。使用事件對像作為第一個參數呼叫,驗證器作為第二個參數。

正如 jQuery/Validation 文件所說,您可以使用invalidHandler在送出無效表單時做出反應。

但是由於 MVC 不顯眼的驗證實例化了 Validation 本身,因此您必須稍後掛鉤此事件。

使用與 jQuery/Validation 完全相同的機制:您可以將程式碼綁定到表單元素自定義事件’ invalid-form.validate ‘,對應於 invalidHandler!

$(document).ready(function() {
   $('#myform').bind('invalid-form.validate',function(){
       alert('invalid form!');
   });
});

給你的表格一個 id 使用:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) {
} 

更新:

獲取現有驗證對象的另一種方法是在表單上呼叫validate()。如果該表單的驗證器已經創建,它將被返回:

編輯:初始化發生後,更改.settings.invalidHandler為時已晚無法綁定。因此,除非您重新初始化驗證器,否則以下程式碼段將 [不再] 起作用。

$(document).ready(function() {
   var existingValdiation = $("#myform").validate();
   //the settings property corresponds to the options parameter
   existingValdiation.settings.invalidHandler = function (form) {
       alert('invalid form!');
   };
   // not recommended:
   // re-init would bind settings.invalidHandler to 'invalid-form.validate'
   // existingValdiation.init();
});

引用自:https://stackoverflow.com/questions/7651576