使用KnockoutJS和Jquery对话框时,jQuery验证失败

时间:2011-04-14 12:33:54

标签: jquery jquery-ui asp.net-mvc-3 knockout.js

我有一个在MVC3中使用html.RenderAction渲染的表单。

除此之外,我还有一个用于淘汰赛的jquery模板。使用默认的“data-val-required”属性将模型正确呈现到视图中。

但是我注意到jQuery验证总是返回true。

<div id="dlgAdd" data-bind="template: { name: 'editTemplate', data: selected }">
</div>
<script id="editTemplate" type="text/html">  
<div> 
@{
    Html.RenderAction("EditDialog");
}
</div>    
</script>

EditDialog partial呈现以下输出:

 <form method="post" id="frmAddNew" action="/Project/AddNew"> 
    <div class="fields-inline">         
       <div class="editor-label">             
          <label for="Name">Name</label>         
       </div>         

       <div class="editor-field">
          <input data-val="true" data-val-required="The Name field is required." id="Name" name="ko_unique_41" value="" type="text">
          <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
       </div>
    </div>
    <span id="validationmessage" class="field-validation-error"></span>   
  </form>

然而,当我致电$("#frmAddNew").valid())时,它总是返回'true'。 我不知道它的淘汰赛,jQuery或mvc是否阻止验证返回false。

2 个答案:

答案 0 :(得分:7)

尝试调用$.validator.unobtrusive.parse(yourFormElement)以获取与解析验证相关的data-属性。

您可以触发它:

<div id="dlgAdd" data-bind="template: { name: 'editTemplate', data: selected, afterRender: hookUpValidation  }">
</div>

然后,hookUpValidation看起来像:

hookUpValidation: function(nodes) {
    $.validator.unobtrusive.parse(nodes[0]);
}

答案 1 :(得分:0)

我已经查看了jQuery validate的代码,我认为它不适用于动态添加的表单(Knockout的功能)。

看看这个&gt; Jquery Validation Plugin, dynamic form validation

您需要在使用jQuery live()方法注册的事件处理程序中调用validate()方法。 live方法也链接到所有动态添加的元素。

让我知道它是否有效。