显示字段上内联 AJAX 调用的验证错误

Show the validation error from the AJAX calls inline on the field

当 AJAX 调用返回验证失败时,我试图在字段(内联)上显示错误消息。

        <input type="text" class="text-danger float-right" style="border:none;font-size: smaller" id="@("errorMessage")" readonly />
        <div class="form-group">
            <label asp-for="OrderQuantity" class="control-label"></label>
            <input asp-for="OrderQuantity" id="txt" class="form-control" />
            <span asp-validation-for="OrderQuantity" class="text-danger"></span>
        </div>
        <input type="hidden" id="orderId" name="orderId" value="@Model.OrderId" />
        <button id="button">Click Me</button>
    </form>
 </div>
</div>

@section Scripts {
 <script type="text/javascript">
$("#button").click(function () {
    var orderedQuantity = $("#txt").val();
    var orderId = $("#orderId").val();
    var data = {
        orderId: orderId,
        orderedQuantity: orderedQuantity
    };

    $.ajax({
        type: 'POST',
        url: '@Url.Action("EditItem", "Orders")',
        data: data,
        dataType: "json",
        success: function (result) {
            if (result.status === "NotAvailable") {
                alert("NotAvailable");
                $("#errorMessage").val("Enter a valid Quantity");
            }
            else {
                var url = '@Url.Action("Index", "Orders")';
                window.location.href = url + "?custEmail=xyz@rrr.org";
            }
        },
        error: function (error) {
                alert(error);
            }
    });
});
</script>

}

表单和 AJAX 调用如下所示

当从控制器操作返回的 result.status"NotAvailable" 时,我正在创建类似 $("#errorMessage").val("Enter a valid Quantity"); 的错误消息,并在我的字段顶部使用它

        <input type="text" class="text-danger float-right" style="border:none;font-size: smaller" id="@("errorMessage")" readonly />

当我点击下面的按钮后尝试测试验证失败的情况时,我看到的是

如何返回同一屏幕并在字段上显示错误 Enter a valid Quantity

您需要进行以下修改:

像这样设置按钮类型:<button id="button" type="button">Update</button> 而不是 <button id="button">Click Me</button>

Note: By defualt button type is submit so it always post additional form POST Request so that you are redirecting to that page.

输出:

更新: 虽然我认为你的 errorMessage 标签看起来不错,但我通常使用 javascript 或 Jquery 不同的标签幻灯片如下是完整代码供您参考。随意根据您的要求进行定制。

HTML:

    <div>
        <input type="text" class="text-danger float-right" style="border:none;font-size: smaller" id="errorMessage" readonly />
        <form asp-action="EditItem">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="OrderQuantity" class="control-label"></label>
                <input asp-for="OrderQuantity" id="txt" class="form-control" />
                <span asp-validation-for="OrderQuantity" class="text-danger"></span>
            </div>
            <input type="hidden" id="orderId" name="orderId" value="123456" />
            <input type="hidden" id="inventoryorderId" name="inventoryorderId" value="22222" />
            <input type="hidden" id="inventoryId" name="inventoryId" value="3333" />
            <button id="button" type="button">Update</button>
        </form>
    </div>

Javascript:

@section Scripts {
    <script type="text/javascript">
    $("#button").click(function () {
        var orderedQuantity = $("#txt").val();
        var orderId = $("#orderId").val();
        var inventoryorderId = $("#inventoryorderId").val();
        var inventoryId = $("#inventoryId").val();
        var data = {
            orderId: orderId,
            inventoryorderId: inventoryorderId,
            inventoryId: inventoryId,
            orderedQuantity: orderedQuantity,
        };

        $.ajax({
            type: 'POST',
            url: '@Url.Action("EditItem", "Order")',
            data: data,
            dataType: "json",
            success: function (data) {
                console.log(data);

                if (data.status === "NotAvailable") {
                    alert("NotAvailable");
                    $("#errorMessage").val("Enter a valid Quantity");
                    return false;
                }
                else {
                    alert("Else fired");
                      var url = '@Url.Action("Index", "Order")';
                window.location.href = url;
                }

            },
            error: function (error) {
                alert("Alert");
            }
        });
    });
    </script>
}

希望能解决您的问题。