2

ユーザーが入力した数値がデータベースに存在するかどうかを検証したいので、JSON オブジェクトを返し、サーバーに投稿する前に入力を確認するアクションがあります。問題は、常に false を返すことです。

Javascript:

<script type="text/javascript">
        var pid = $("#ProductID").val();
        var flag = false;

        $("#button1").click(function () {
            $.get('/Invoice/GetData',
                function (data) {
                    for (var i = 0; i < data.length; i++) {
                        if (data[i] == pid) {
                            flag = true;
                        }
                    }
                });
            if (flag == false) {
                alert("Invalid Product ID");
                location.reload();
                return false;
            }
            else {
                alert("validations passed");
                return true;
            }
        });
</script>

フォーム (ASP.NET MVC4)

@using (Html.BeginForm("AddInvoiceDetails","Invoice",FormMethod.Post)) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Invoice_Detail</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.InvoiceID)
        </div>
        <div class="editor-field">
            @Html.TextBox("InvoiceID", (String)ViewBag.invoiceid,new { @readonly="readonly" })
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductID)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model=>model.ProductID)
            @Html.ValidationMessageFor(model => model.ProductID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Quantity)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Quantity)
            @Html.ValidationMessageFor(model => model.Quantity)
        </div>

        <p>
            <input id="button1" type="submit" value="Create" />
        </p>
    </fieldset>
} 
4

2 に答える 2

2

非同期の ajax を使用しているため、実行$.get()が完了する前に if ステートメントが実行されます。あなたはこれを行うことができます:

    $("#button1").click(function (event) {  
        $.get('/Invoice/GetData',
            function (data) {
                for (var i = 0; i < data.length; i++) {
                    if (data[i] == pid) {
                        flag = true;
                    }
                }
                if (flag == false) {
                    alert("Invalid Product ID");
                    location.reload();
                    event.preventDefault(); //prevents post to server
                }
                else {
                    alert("validations passed");                
                }
        }); 
});
于 2013-08-16T04:15:41.647 に答える
1

友人の助けを借りて解決策を見つけてください。他のすべての回答は本当に役に立ちます。解決策は、タイプを"button1"ボタンに変更し、検証が true の場合はフォームを送信し、false の場合はダイアログを表示することです。コード:

Javascript:

<script type="text/javascript">
        $("#button1").live("click",function (event) {
            $.get('/Invoice/GetData',
                function (data) {
                    var pid = $("#ProductID").val();
                    var flag = false;
                    for (var i = 0; i < data.length; i++) {
                        if (data[i] == pid) {
                            flag = true;
                        }
                    }
                    if (flag == false) {
                        alert("Invalid Product ID");
                        return false;
                    }
                    else {
                        $("#myform").submit();
                        return true;
                    }
                });
        });

フォーム (ASP.NET MVC4)

@using (Html.BeginForm("AddInvoiceDetails", "Invoice", FormMethod.Post, new { id = "myform", data_ajax = "false" }))
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Invoice_Detail</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.InvoiceID)
        </div>
        <div class="editor-field">
            @Html.TextBox("InvoiceID", (String)ViewBag.invoiceid, new { @readonly = "readonly" })
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ProductID)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ProductID)
            @Html.ValidationMessageFor(model => model.ProductID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Quantity)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Quantity)
            @Html.ValidationMessageFor(model => model.Quantity)
        </div>
        <p>
            <input id="button1" type="button" value="Create" />
        </p>
    </fieldset>
}
于 2013-08-16T11:17:09.357 に答える