2012-06-28 12 views
0

我有一個應用程序在ASP.NET MVC 3使用剃刀。我在jQuery validation and unobtrusive validation的文本框中設置了一些data annotations爲什麼不引人注意的MVC驗證在IE7和IE8中不起作用?

問題是,有些字段使用像以下functions這樣的普通舊式香草JavaScript進行自定義驗證邏輯。

function Validation() { 
    var signUp = SignUpValidation(); 
    var book = BookingValidation(); 
    if (signUp && book) { 
     return true; 
    } 
    else 
    { 
     ShowErrorMessage(); 
     return false; 
    } 
} 

function ShowErrorMessage() 
{ 
    $('span#ErrorMessage').html('These fields are required'); 
} 

SignUpValidation()其中,BookingValidation()是函數,其返回 或者在一些其他驗證 邏輯的基礎truefalse

這是我的提交按鈕代碼。

@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post, 
new {@onsubmit = "return Validation()" })) 
{ 
    @Html.Partial("_BookingView") 
} 

該方法適用於除IE-7/8以外的所有瀏覽器。

回答

1

我最近遇到了同樣的問題..並制定了以下解決方案: ,而不是在窗體「onsubmit」事件中作爲單獨/秒提交處理程序提供額外的表單驗證(除了不顯眼的mvc 3驗證)你應該在mvc3的主要不顯眼的驗證過程中「注入」你的附加驗證功能。讓它處理剩下的事情。

在常見的JavaScript代碼/文件創建一個自定義的驗證適配器的地方:

(function ($) { 
    if($.validator && $.validator.unobtrusive) { 
    $.validator.unobtrusive.adapters.addBool("AdditionalFormValidation"); 
    } 
} (jQuery)); 

在你的視圖文件,那就是你有形式,添加以下代碼來創建自定義驗證一個新的jQuery驗證方法您在你上面的共同文件中定義的適配器:

(function ($) { 
     if ($.validator) { 
      $.validator.addMethod("AdditionalFormValidation", function (value, element) { 
       return Validation(); 
      }); 
     } 
    } (jQuery)); 

這裏 - 「AdditionalFormValidation」是驗證方法的名稱與您的自定義驗證適配器。 - 「驗證」是您的JavaScript函數的名稱,它負責您的附加驗證並返回驗證成功或失敗的布爾結果。

在您的形式,刪除您已經提供了「的onsubmit」處理程序,一個無形的虛擬文本字段添加到您的形式,並應用所創建的自定義不顯眼的驗證適配器/規則,下面給出:

@using (Html.BeginForm(MVC.Booking.Actions.AtWork(model: null), FormMethod.Post)) 
{ 
@Html.Partial(MVC.Booking.Views._BookForAtWork) 
<input type="text" style="visibility:hidden; width: 1px; height: 1px;" name="hiddenValidation" id="hiddenValidation" data-val="true" data-val-AdditionalFormValidation /> 
} 

這個解決方案對我來說就像一個魅力。對我來說,這似乎是一個更乾淨的解決方案,因爲它在mvc3的同一個不顯眼的驗證流程中注入額外的驗證,而不是創建第二個驗證流程。此外,它爲內置於未來的改進,用於爲所有客戶端自定義驗證工作創建自定義數據註釋(驗證)。

1

你可能會嘗試更新你的jQuery.Validate.min.js和jquery.validate.unobtrusive.min.js文件到最新版本......它可能是這些文件是舊的......我有同樣的問題有時候回來並通過這個更新來修復它。

相關問題