15

我想以及客戶端驗證作爲服務器端驗證。我意識到這一點,如下所示:Asp.Net MVC EnableClientValidation不起作用

型號:(該模型有一個DataModel中(DBML),其中包含測試類)​​

namespace MyProject.TestProject 
{ 
    [MetadataType(typeof(TestMetaData))] 
    public partial class Test 
    { 

    } 

    public class TestMetaData 
    { 
     [Required(ErrorMessage="Please enter a name.")] 
     [StringLength(50)] 
     public string Name { get; set; } 
    } 
} 

控制器是沒什麼特別的。

的觀點:

<% Html.EnableClientValidation(); %> 
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
      new AjaxOptions {}, new { enctype = "multipart/form-data" })) 
    {%> 
    <%= Html.AntiForgeryToken()%> 
    <fieldset> 
     <legend>Widget Omschrijving</legend> 
     <div> 
      <%= Html.LabelFor(Model => Model.Name) %> 
      <%= Html.TextBoxFor(Model => Model.Name) %> 
      <%= Html.ValidationMessageFor(Model => Model.Name) %> 
     </div> 
    </fieldset> 
    <div> 
     <input type="submit" value="Save" /> 
    </div> 
<% } %> 

爲了這個,我加入到js文件還引用了所有工作:

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 

最終還是工作,但它不工作100%: 它確實按下按鈕後將進行無頁面刷新的驗證。 它也做「一半」客戶端驗證。只有當您在文本框中鍵入一些文本,然後退格鍵入的文本。出現客戶端驗證。但是,當我通過在控件之間點擊進行嘗試時,沒有客戶端驗證。

我想念一些參考資料嗎? (我使用Asp.Net MVC 2 RTM)

回答

5

更改加載的JavaScript ...的順序

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

有完全相同的問題,這清除了對我來說......

+0

[這裏](http://pastebin.com/685bHTHH)是如何驗證包含在我的頁面。但是,客戶端驗證完全不起作用,您是否看到任何問題? – Shimmy 2013-07-11 05:27:03

1

我以爲我錯過了一些東西,但我知道jQuery驗證插件不會對mouseEnter/mouseLeave做出反應。據在該插件的文件(在plug in page - 尋找標有「有幾件事情看演示的玩弄時」一節):

場之前被標記爲無效,驗證懶惰:在第一次提交表單之前,用戶可以在沒有感到煩人的消息的情況下通過字段進行標記 - 在他有機會實際輸入正確值之前他不會被竊聽

我認爲這是與MVC 2客戶端驗證相同的規則。我不能確定,因爲文檔沒有說什麼,但「它在我的機器上運行」:)。

我使用jQuery驗證路線,MVC Futures(注意,該文檔不存在)支持。要使用它,你只需要更換的腳本標籤MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js文件與這兩個標籤:

<script src="/js/jquery.validate.js" type="text/javascript"></script> 
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script> 

與你更換路徑。

我還發現需要從開發者頁面升級到最新版本的jquery.validate.js,因爲我們在這裏使用了更高版本的jQuery(1.4)。

希望有所幫助。

+0

我用你所描述的修改了我的代碼,但沒有改進。 我使用: jQuery 1.4.2 jQuery驗證1.7 MicrosoftMvcJQueryValidation no versionNumber availabe。 我還將MicrosoftMvcJQueryValidation .js文件中的引用更改爲/// ,但仍然沒有任何改進。 – Colin 2010-03-24 14:54:17

1

陛下...,它的晚來回答,但試試這個:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script> 
相關問題