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

使用KnockoutJS和jQuery对话框时,jQuery验证失败,jquery,jquery-ui,asp.net-mvc-3,knockout.js,Jquery,Jquery Ui,Asp.net Mvc 3,Knockout.js,我有一个在MVC3中使用html.RenderAction呈现的表单 除此之外,我还有一个用于knockout的jquery模板。使用默认的“data val required”属性将模型正确渲染到视图中 然而,我注意到jQuery验证总是返回true <div id="dlgAdd" data-bind="template: { name: 'editTemplate', data: selected }"> </div> <script id="editTemp

我有一个在MVC3中使用html.RenderAction呈现的表单

除此之外,我还有一个用于knockout的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>

@{
Html.RenderAction(“编辑对话框”);
}
EditDialog部分渲染以下输出,如下所示:

 <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”。
我不知道是它的knockout、jQuery还是mvc阻止了验证返回false。

我研究了jqueryvalidate的代码,我认为它不适用于动态添加的表单(knockout就是这样做的)

看看这个>

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


让我知道它是否有效。

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

你可以像这样触发它:

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

您是否尝试过在不使用knockoutjs的情况下使用它来查看验证是否有效?您好,快速测试显示相同的呈现html在不在内部时也有效。他们的内心似乎被打破了。我需要这个用于ko和模板制作,所以不知道如何绕过这个…嗯,似乎很奇怪,我必须使用“鼠标悬停”事件来完成这项工作。没有其他解决方法吗?我希望验证函数可以与jquery模板配合使用。我认为这与mouseover事件无关,而是与live()方法有关。您必须在表单的提交事件中调用validate()函数。事件是使用jQuery.live()方法注册的吗?嗨,我试过了,但运气不好。只有当我将class=“required”显式添加到标记中时,它似乎才起作用,然而MVC3呈现模型,因此标记包含数据注释属性,以便使用“data val required”。为什么它可以使用“required”而不是“data val required”?好的-我认为问题可能是您的表单包装在一个div中,我列出的节点[0]就是这个div。您需要调用
$.validator.unobtrusive.parse
。可以这样做:
$.validator.unobtrusive.parse($(“form”,nodes[0])。这是一个使用MVC3使用的相同脚本的示例:@Jon-只是好奇你是否找到了一个有效的解决方案,或者在上一次评论之后你是否仍然有问题。我只是暂时搁置了这个,以便有机会重新访问它。我会让你知道我的进展。再次感谢。我的表单验证工作如您所说,但我这样称呼它:hookupValidation:function(nodes){$.validator.unobtrusive.parse($(“#frmAdd”);},
hookUpValidation: function(nodes) {
    $.validator.unobtrusive.parse(nodes[0]);
}