0

私の問題は、ページが最初にロードされたときにアラート(1)とアラート(2)がポップアップすることですが、保存ボタンをクリックするとアラート(3)はポップアップしませんが、検証メッセージが表示されます(ドロップダウンリストを正しくまたは間違って入力すると、すべてが保存されます。私はこの種のJSを持っています:

        <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function () {
            alert(1);
            PassWayValidators();
            $('#documents_TravelDocumentDocumentPass_PassDate').datepicker();           

        });

        function PassWayValidators() {
            alert(2);
            $.validator.addMethod('PassWayValidator',
                    function (value, element) {
                        alert(3);
                    }, 'Please Inert Valid Numbers');

            $("#documents_TravelDocumentDocumentPass_PassWayId").rules("add", {
                PassWayValidator: true
            });
        }
    </script>
    <...Some Code Here...>
         <div class="TravelDocumentDocumentPassCommentInner">
                                <span>გადაცემის ფორმა
                                    <br />
                                    @Html.DropDownListFor(model => documents.TravelDocumentDocumentPass.PassWayId, (IEnumerable<SelectListItem>)ViewBag.DocumentPassTypeList, String.Empty, isDisabled)
                                    @Html.ValidationMessageFor(model => documents.TravelDocumentDocumentPass.PassWayId, "*")
                                </span>
                            </div>
    <...Some Code Here too... and>
 @Html.ValidationSummary()

何が問題なのか誰にも教えてもらえますか?

4

1 に答える 1

0

カスタム バリデータを作成しているので、すぐに修正が必要な 2 つのことがわかります。

PassWayValidators();まず、 $(document).ready() の外で呼び出す必要があります。それが必要かどうかは 100% 確信が持てませんが、カスタム検証を機能させることができた唯一の方法だと思います。

PassWayValidators();

$(document).ready(function () {
    $('#documents_TravelDocumentDocumentPass_PassDate').datepicker();                     
});

次に、ドロップダウンを構成して、特定の html 属性を指定して検証関数を呼び出すようにする必要があります。

@Html.DropDownListFor(model => 
    documents.TravelDocumentDocumentPass.PassWayId, 
    (IEnumerable<SelectListItem>)ViewBag.DocumentPassTypeList, 
    String.Empty, 
    new { 
        data_val = "true",
        data_val_PassWayValidator = "Please insert valid numbers"
    })

そんな感じ。rules("add" { }) の目的はわかりませんが、それが必要かどうかはわかりません。何か見逃した場合のために、ここに私のアプリケーションの 1 つから取られた完全なサンプルを示します。

<!-- some form and other html and stuff -->
@Html.TextBox("Amount", null, new 
{ 
    data_val = "true", 
    data_val_required = "This field is required", 
    data_val_number = "The field must be a number",
    data_val_notBeZero = "Value must not be zero"
})

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>

<script type="text/javascript">
    // validators
    $.validator.addMethod("notBeZero", function (value, element)
    {
        if (Number(Math.abs(value).toFixed(2)) == 0)
        {
            return false;
        }

        return true;

    }, "Value must not be zero");

    $.validator.unobtrusive.adapters.addBool("notBeZero");
</script>
于 2012-07-26T16:07:00.417 に答える