Asp.net-Mvc
ASP.net MVC 驗證鉤子
我在 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(); });