0

我在表单的 PageModel 中有 2 个 OnPost 处理程序,有没有办法在每个按钮上使用不同的 post 处理程序运行 Unobtrusive AJAX?我似乎在这方面找不到任何东西。或者有没有更好的方法通过 JQuery 实现这一点?

两个处理程序似乎都在执行正确的功能,但我只能运行当前使用此方法的一个或另一个。

这是我所拥有的:

<form method="post" data-ajax="true" data-ajax-method="post" data-ajax-update="#panel">

            <input type="hidden" value="@Model.Options.Count()" name="optionCount" />
            <input type="hidden" value="@Model.Product.Name" name="product" />
            <input type="hidden" value="@Model.Product.ProductId" name="productId" />
            <input type="hidden" value="@Model.Headings" name="headings" />
            <input type="hidden" value="@Model.HeadingsString" name="headingsString" />
            <input type="hidden" value="@Model.Price" name="price" />

            @foreach (var item in Model.Headings.Select((value, index) => new { value, index }))
            {
                <div class="form-group">
                    <label class="control-label" id="headingA">@item.value</label>

                    @foreach (var option in Model.Options.Select((value, index) => new { value, index }))
                    {
                        if (item.index == option.index)
                        {
                            <select class="form-control" name="@item.index" asp-items="option.value"></select>
                        }
                    }
                </div>
            }
            <p>
                <strong>Price:</strong>
                <div id="panel">@Model.Price</div>
            </p>
            <button type="submit" class="btn btn-outline-primary">Calculate</button>

            <button class="btn btn-outline-primary" asp-page-handler="Cart">Add To Cart</button>
        </form>

感谢您提供任何信息!

4

1 回答 1

0

这是一个黑客,但似乎正在工作。

在我的情况下,我只需要 1 个 AJAX 发布处理程序,因此我使用 JQuery 按钮单击事件编辑了 data-ajax="true/false",这使按钮(不需要 AJAX)能够使用其处理程序发布。

<form method="post" id="form" data-ajax-method="post" data-ajax-update="#panel">
            <input type="hidden" value="@Model.Options.Count()" name="optionCount" />
            <input type="hidden" value="@Model.Product.Name" name="product" />
            <input type="hidden" value="@Model.Product.ProductId" name="productId" />
            <input type="hidden" value="@Model.Headings" name="headings" />
            <input type="hidden" value="@Model.HeadingsString" name="headingsString" />
            <input type="hidden" value="@Model.Price" name="price" />


            @foreach (var item in Model.Headings.Select((value, index) => new { value, index }))
            {
                <div class="form-group">
                    <label class="control-label" id="headingA">@item.value</label>

                    @foreach (var option in Model.Options.Select((value, index) => new { value, index }))
                    {
                        if (item.index == option.index)
                        {
                            <select class="form-control" name="@item.index" asp-items="option.value"></select>
                        }
                    }
                </div>
            }
            <p>
                <strong>Price:</strong>
                <div id="panel">
                    <label id="price">@Model.Price</label>

                </div>
            </p>
            <button id="buttonAdd" type="submit" class="btn btn-outline-primary">Calculate</button>

            <button id="buttonRemove" class="btn btn-outline-primary" asp-page-handler="Cart">Add To Cart</button>
        </form>

jQuery

<script>
$(document).ready(function () {
    $("#buttonAdd").click(function () {
        $("#form").attr("data-ajax", "true");
    });
});
$(document).ready(function () {
    $("#buttonRemove").click(function () {
        $("#form").attr("data-ajax", "false");
    });
});

于 2020-03-23T18:35:25.053 回答