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,你将搜索范围缩小至当前活动页面。