jQuery Mobile和Unobtrusive验证

Don*_*ide 9 asp.net-mvc jquery-validate jquery-mobile unobtrusive-validation

我正在利用MVC3附带的不引人注目的验证创建一个基于jQuery Mobile(Alpha 3)ASP.NET MVC 3应用程序.当直接访问页面时(Url中没有哈希),验证工作完美.但是,当您导航到该页面时,jQuery Mobile使用Ajax Navigation动态加载它(在Url中显示哈希)并且验证停止工作.

以下是使用中的代码示例:

模型:

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

查看(剃刀):

@Html.LabelFor(model => model.PropertyName)
@Html.TextBoxFor(model => model.PropertyName)
@Html.ValidationMessageFor(model => model.PropertyName)
Run Code Online (Sandbox Code Playgroud)

生成的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>
Run Code Online (Sandbox Code Playgroud)

之前可能已加载其他页面,并且HTML元素不再具有唯一ID.除了滚动我自己的Html Helper类来生成Label,TextBox和ValidationMessage的HTML之外,还有什么方法可以处理这种情况吗?

pav*_*und 14

我在同样的问题上一直在努力,但是@Zote指出了我正确的方向.

parse() 是要走的路,但要确保传入一个选择器,即:

jQuery.validator.unobtrusive.parse("form")
Run Code Online (Sandbox Code Playgroud)

要么

jQuery.validator.unobtrusive.parse(document)
Run Code Online (Sandbox Code Playgroud)

挂钩的最佳方式可能是通过JQMs pageshow活动.这将在每次新的页面转换后触发,就像这样,你可能也喜欢在jqm在页面上完成它之前执行此操作以及使用pagebeforeshow事件

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

通过使用.ui-page-active,您可以将搜索范围缩小到当前活动页面.


Zot*_*ote 5

jQuery.validator.unobtrusive.parse()加载新内容后你打电话了吗?在Brad Wilson的博客上阅读这篇文章.