在字段上显示来自 AJAX 调用的验证错误

Posted

技术标签:

【中文标题】在字段上显示来自 AJAX 调用的验证错误【英文标题】:Show the validation error from the AJAX calls inline on the field 【发布时间】:2021-11-03 04:45:42 【问题描述】:

当 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

【问题讨论】:

能否请您看看解决方案,我希望它会相应地解决 【参考方案1】:

您需要进行以下修改:

像这样设置你的按钮类型:&lt;button id="button" type="button"&gt;Update&lt;/button&gt; 而不是&lt;button id="button"&gt;Click Me&lt;/button&gt;

注意: 默认按钮类型是提交,因此它始终发布附加表单 POST 请求,以便您重定向到该表单 页面。

输出:

更新: 虽然我认为您的 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>

希望这能解决您的问题。

【讨论】:

谢谢,但仍然没有显示错误消息。你认为我有正确的标签来显示错误吗? 能否请您发布您在上面的示例中使用的标签 我已经更新了完整的答案。希望它可以帮助您实施。 谢谢你的帮助..我正在为错误消息做id="@("errorMessage")" 所以它没有出现 应该也可以,但最好使用id="errorMessage"这种模式。很高兴为您提供帮助。

以上是关于在字段上显示来自 AJAX 调用的验证错误的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net 客户端验证错误消息不断显示来自 jquery 的值更改

在 Laravel Ajax 请求验证中获取错误字段名称

防止ajax表单在客户端错误上调用服务器

如何在 ajax 调用中提交表单之前调用 javascript 验证函数

发生验证错误后,如何使用 PrimeFaces AJAX 填充文本字段?

PHP、MySQL、jQuery、AJAX:json 数据返回正确响应但前端返回错误