【问题标题】:Expressive annotation rebind form after adding dom添加dom后表达性注解重新绑定表单
【发布时间】:2017-11-18 22:13:05
【问题描述】:

我在包含列表对象的表单上使用了富有表现力的注释。第一次加载,一切正常。

有一个按钮,允许在此列表中添加对象。为了添加这个对象,我将表单的一部分替换为从服务器端呈现的局部视图。

视图没问题,之前的对象验证工作正常。但是加的不行。

这是在我的局部视图中加载的 javascript 代码

$(document).ready(function () {
    $('[data-toggle="popover"]').popover();

    var validator = $('#controlReportForm').data('validator');
    //Settings to validate hiddend fileds (Required for know how validation)
    validator.settings.ignore = "";
    validator.settings.onkeyup = function (element) { // execute validation of current field on keyup event
        $(element).valid();
    };
});

这是第一次加载时生成的html

<div class="row action">
            <input id="ListActionsCo_0__Type" name="ListActionsCo[0].Type" type="hidden" value="CO" class="ea-triggers-bound">
            <input data-val="true" data-val-number="The field Order must be a number." data-val-required="The Order field is required." id="ListActionsCo_0__Order" name="ListActionsCo[0].Order" type="hidden" value="0" class="ea-triggers-bound">
            <div class="col-md-8">
                <textarea class="form-control ea-triggers-bound valid" cols="20" data-val="true" data-val-requiredif="- Le champ \&quot;Identification de la non conformité\&quot; est obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Type == 'DP'&quot;" data-val-requiredif-fieldsmap="{&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_0__Texte" name="ListActionsCo[0].Texte" rows="2" aria-describedby="ListActionsCo_0__Texte-error" aria-invalid="false">co co co</textarea>              
            </div>
            <div class="col-md-4">
                <div class="row">
                    <div class="col-md-6">
                        Responsable
                    </div>
                    <div class="col-md-6">
                       <input class="form-control ea-triggers-bound" data-val="true" data-val-requiredif="Champ obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Texte != null &amp;&amp; (Type == 'CU' || Type == 'CO' || Type == 'PR' || Type == 'VE')&quot;" data-val-requiredif-fieldsmap="{&quot;Texte&quot;:&quot;string&quot;,&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_0__Responsable" name="ListActionsCo[0].Responsable" type="text" value="respco">
                       <span class="field-validation-valid" data-valmsg-for="ListActionsCo[0].Responsable" data-valmsg-replace="true"></span>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                         Date de réalisation
                    </div>
                    <div class="col-md-6">
                       <div class="input-group date">
                          <input class="form-control ea-triggers-bound" data-val="true" data-val-date="The field DtVal must be a date." data-val-requiredif="Champ obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Texte != null &amp;&amp; (Type == 'CU' || Type == 'CO' || Type == 'PR' || Type == 'VE')&quot;" data-val-requiredif-fieldsmap="{&quot;Texte&quot;:&quot;string&quot;,&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_0__DtVal" name="ListActionsCo[0].DtVal" type="text" value="13/06/2017">
                              <span class="input-group-addon">
                                <span class="glyphicon glyphicon-calendar">
                                </span>
                              </span>
                        </div>
                        <span class="field-validation-valid" data-valmsg-for="ListActionsCo[0].DtVal" data-valmsg-replace="true"></span>
                    </div>
                </div>
            </div>
        </div>

这是添加对象时生成的html

  <div class="row action">
            <input id="ListActionsCo_1__Type" name="ListActionsCo[1].Type" type="hidden" value="CO" class="ea-triggers-bound">
            <input data-val="true" data-val-number="The field Order must be a number." data-val-required="The Order field is required." id="ListActionsCo_1__Order" name="ListActionsCo[1].Order" type="hidden" value="0" class="ea-triggers-bound">
            <div class="col-md-8">
               <textarea class="form-control ea-triggers-bound" cols="20" data-val="true" data-val-requiredif="- Le champ \&quot;Identification de la non conformité\&quot; est obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Type == 'DP'&quot;" data-val-requiredif-fieldsmap="{&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_1__Texte" name="ListActionsCo[1].Texte" rows="2"></textarea>
            </div>
            <div class="col-md-4">
                <div class="row">
                    <div class="col-md-6">
                        Responsable
                    </div>
                    <div class="col-md-6">
                        <input class="form-control ea-triggers-bound" data-val="true" data-val-requiredif="Champ obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Texte != null &amp;&amp; (Type == 'CU' || Type == 'CO' || Type == 'PR' || Type == 'VE')&quot;" data-val-requiredif-fieldsmap="{&quot;Texte&quot;:&quot;string&quot;,&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_1__Responsable" name="ListActionsCo[1].Responsable" type="text" value="">  
                         <span class="field-validation-valid" data-valmsg-for="ListActionsCo[1].Responsable" data-valmsg-replace="true"></span>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        Date de réalisation
                    </div>
                    <div class="col-md-6">
                       <div class="input-group date">
                          <input class="form-control ea-triggers-bound" data-val="true" data-val-date="The field DtVal must be a date." data-val-requiredif="Champ obligatoire" data-val-requiredif-allowempty="false" data-val-requiredif-expression="&quot;Texte != null &amp;&amp; (Type == 'CU' || Type == 'CO' || Type == 'PR' || Type == 'VE')&quot;" data-val-requiredif-fieldsmap="{&quot;Texte&quot;:&quot;string&quot;,&quot;Type&quot;:&quot;string&quot;}" id="ListActionsCo_1__DtVal" name="ListActionsCo[1].DtVal" type="text" value="">
                               <span class="input-group-addon">
                                  <span class="glyphicon glyphicon-calendar"></span>
                               </span>
                        </div>
                        <span class="field-validation-valid" data-valmsg-for="ListActionsCo[1].DtVal" data-valmsg-replace="true"></span>
                    </div>
                </div>
            </div>
        </div>

我看不出有什么不同。但我认为我需要重新绑定 dom 的这个新部分,以便加载以进行验证。

我试过了

$.validator.unobtrusive.parse($('#controlReportForm'));

但无事可做。

任何帮助,评论都会有所帮助。 谢谢

【问题讨论】:

  • 尝试在部分 html 上添加相同的 document.ready 脚本
  • 我已在加载的局部视图上准备好文档。有什么方法可以重新绑定所有表单?
  • 哼...所以,试试那些答案stackoverflow.com/questions/6269320/…
  • 是的,完美,@dfortun 答案有效。谢谢
  • 很高兴为您提供帮助。我认为您不需要将其作为答案,人们会看到链接! :-)

标签: c# jquery asp.net-mvc unobtrusive-validation expressiveannotations


【解决方案1】:

好的,感谢@Elmer Dantas,

解决方案是在检索 dom 后添加此 javascript 代码

var $form = $("form");

$form.unbind();
$form.data("validator", null);

$.validator.unobtrusive.parse(document);
// Re add validation with changes
$form.validate($form.data("unobtrusiveValidation").options);

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2023-03-02
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2023-04-09
    • 2016-03-15
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多