首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Razor Pages中使用Ajax发布表单

如何在Razor Pages中使用Ajax发布表单
EN

Stack Overflow用户
提问于 2020-04-12 03:41:59
回答 1查看 933关注 0票数 0

我是Razor Pages的新手,所以我可能想要一些非常基本的东西。

我有一个带有表单的剃刀页面,它由下拉列表和按钮组成。它还有一个参数orderId作为路由数据。

代码语言:javascript
复制
<form method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Article.Nickname" class="control-label"></label>
            <select asp-for="Article.ArticleId" class="form-control"
                    asp-items="@Model.ArticleNicknameSL">
                <option value="">-- Select Article--</option>
            </select>
            <span asp-validation-for="Article.ArticleId" class="text-danger" />
        </div>

        <div class="form-group">
            <input type="submit" value="Add Article" id="add-article" asp-page-handler="Article" class="btn btn-primary" />
        </div>
    </form>

有一个PageModel,它包含以下内容:

代码语言:javascript
复制
public async Task<IActionResult> OnPostArticleAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }
        ArticlesInOrder newArticleInOrder = new ArticlesInOrder();

        Order = await _context.Orders
            .Include(o => o.Vendor)
            .Include(o => o.ArticlesInOrders)
                .ThenInclude(o => o.Article)
            .FirstOrDefaultAsync(m => m.OrderId == OrderId);

        Article addArticle = await _context.Articles
            .FirstOrDefaultAsync(a => a.ArticleId == Article.ArticleId);

        newArticleInOrder.Article = addArticle;
        newArticleInOrder.Order = Order;
        newArticleInOrder.Quantity = 1;
        _context.ArticlesInOrders.Add(newArticleInOrder);
        await _context.SaveChangesAsync();

        return await LoadData();
    }

此页面按预期工作。但是,我想在没有回发的情况下发布表单。但我不知道该怎么做。回到我以前使用asp.net 4 (web表单)的日子,我只是把所有的东西都放在标签里!它起作用了。但我了解到,这几天并不是那么容易。我找到了这个:https://www.learnrazorpages.com/razor-pages/ajax/form-post,并以这种方式修改了示例:

代码语言:javascript
复制
<script>
$(function () {
    $('#add-article').on('click', function (evt) {
        evt.preventDefault();
        $.ajax({
            type: "POST",
            url: 'handler=Article',
            data: $('form').serialize(),
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
            success: function () {
                alert('Posted using jQuery')
            }
        }
        )

        });
    });</script>

但它没有做任何有用的事情,只是显示警报中的消息,所以我显然遗漏了一些东西。那么,使用jquery发布表单的正确方式是什么呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-13 01:38:10

好的,它实际上几乎是正确的。我所需要的就是将window.location.href添加到url中:

代码语言:javascript
复制
$(function () {
    $('#add-article').on('click', function (evt) {
        evt.preventDefault();
        $.ajax({
            type: "POST",
            url: window.location.href + '?handler=Article',
            data: $('form').serialize(),
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
            success: function () {
                alert('Posted using jQuery')
            }
        }
        )

        });
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61162712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档