2013-12-19 47 views
8

我有一種情況,當我嘗試檢查一個表單是否有效,但form.valid()總是返回true。但是,如果我嘗試驗證個別控件,它將返回false。jQuery驗證 - form.valid()總是返回true

這是我的形式:

<div class="profilestagsedit"> 
    @using (Html.BeginForm("", "", FormMethod.Post, new { id = "tagsform" })) 
    { 
     @Html.ValidationMessageFor(x => x.EditTagsText) 
     @Html.TextBoxFor(p => p.EditTagsText, new 
      { 
       @id = "txtprofileedittags" 
      }) 
    } 
</div> 

這是我的視圖模型:

[Required(AllowEmptyStrings = false, ErrorMessage = "Please enter at least one Tag ")] 
public string EditTagsText { get; set; } 

這是jQuery代碼:

$('#tagsform').removeData("validator"); 
    $('#tagsform').removeData("unobtrusiveValidation"); 
    $.validator.unobtrusive.parse('#tagsform'); 
    $('#tagsform').validate(); 

而且保存按鈕點擊:

var isValid = $('#tagsform').validate().element($('#txtprofileedittags')); <-- false 
$('#tagsform').valid() true <-- 

我想form.valid()返回false以及我做錯了什麼?

+1

可能是你應該加上「需要」輸入 –

回答

3

你應該添加需要輸入

<input type="text" name="name" required> 

見工作演示here

一個不引人注目的HTML 5兼容的屬性描述的驗證器來連接到輸入字段data-val="true"

查看更多信息here

+0

這是實際上是錯誤的,所需的屬性是jQuery驗證的一部分而不是不顯眼的驗證,並且服務器端框架應該在您需要時處理這個問題。當我運行給定的例子時,它不起作用。在這種情況下,你得到了幸運,其中1取決於另一方恰好解決了這個人的問題。 – War

+0

我沒說過要求的屬性是不顯眼的驗證的一部分。我只是說:「對於不顯眼的HTML 5兼容屬性來描述驗證器要附加到輸入字段data-val ='true'。演示不起作用,因爲jquery驗證源文件的位置不在那裏。可以使用控制檯來檢查它。我會檢查是否有任何驗證cdn可用任何方式,我感謝您的答覆。 –

+0

已更改驗證cdn。請現在檢查演示。 –

8

的問題已經有一個公認的答案,但我相信我已經找到了更具體的答案。我發現如果表單中的FIRST驗證元素具有'name'標記,那麼一切都按照您預期的那樣工作(即,如果表單無效,則.valid()將返回false)。接受的答案方便地包含了一個'名稱'標籤,因此它的工作。

在正常形式中,您肯定需要名稱標籤,因爲這是數據提交到服務器時使用的名稱標籤。但在更現代的環境中,比如那些使用Knockout的環境,沒有理由擁有'name'標籤,因爲數據綁定可以保持數據模型的更新。

+0

使用'name'屬性完美工作,謝謝! – jdnichollsc

-1

我引用這兩個文件:

  • jquery.validate.js
  • jquery.validate.unobstrusive.js < - 刪除此參考!

移除參考jquery.validate.unobstrusive.js,固定對我來說

希望這可以幫助別人

+1

請務必仔細閱讀該問題。這裏發生的問題不會由於額外的腳本引用而引起。正如我在你的副本中所指出的那樣,這些腳本不會發生衝突。事實上,一個需要另一個。 –