9

我創建利用自帶的MVC3不顯眼的驗證一個jQuery Mobile (Alpha 3)基於ASP.NET MVC 3應用。當直接訪問頁面(Url中沒有散列)時,驗證完美無缺。但是,當您導航到頁面時,jQuery Mobile使用Ajax Navigation動態加載它(在Url中顯示哈希)並且驗證停止工作。jQuery Mobile的和不顯眼驗證

下面是代碼的使用的示例:

型號:

[Required(ErrorMessage = "Missing value")] 
[DisplayName("Property Display Name")] 
public int? PropertyName { get; set; } 

視圖(剃刀):

@Html.LabelFor(model => model.PropertyName) 
@Html.TextBoxFor(model => model.PropertyName) 
@Html.ValidationMessageFor(model => model.PropertyName) 

生成的HTML:

<label for="PropertyName">Property Display Name</label> 
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span> 

其他頁面以前已加載和HTML元素不再有唯一的ID這是可能的。除了滾動自己的Html Helper類來爲Label,TextBox和ValidationMessage生成HTML以外,有什麼辦法可以處理這種情況?

+0

我想知道的唯一ID與JQM,它仍然困擾着我。 JQM作者自己並沒有多說這些。我甚至看到了一個預設頁腳的例子,其中id被複制。我看到了兩個解決方案 - 無論是照顧你的ID的自己,或通過強制刪除您從DOM離開作爲新的一個被加載的頁面摧毀JQM緩存 - `pagebeforecreate`事件 – naugtur 2011-02-08 08:16:35

+0

我們遇到類似問題,但避風港」根本沒有工作。我們使用jQ 1.5和jQM 1.03a。在這裏掙扎.. – pavsaund 2011-02-17 10:16:27

回答

5

你有沒有加載後的新內容調用jQuery.validator.unobtrusive.parse()? 在Brad Wilson的博客閱讀this post

14

我一直在掙扎了一下這個同樣的問題,但@Zote我指出了正確的方向。

parse()是去了,但要確保在一個選擇,即通過方式:

jQuery.validator.unobtrusive.parse("form") 

jQuery.validator.unobtrusive.parse(document) 

掛鉤這件事最好的方法可能是通過JQMs pageshow事件。這則每個新頁面過渡之後被觸發,就像這樣,你可能還喜歡做這個之前JQM做它的頁面上魔法以及通過使用pagebeforeshow事件

$('div').live('pageshow',function(event){ 
    jQuery.validator.unobtrusive.parse(".ui-page-active form"); 
}); 

通過使用.ui-page-active,你將搜索範圍縮小至當前活動頁面。