首页 > 解决方案 > 提交表单时有什么方法可以生成路由值而不是查询参数?

问题描述

我有以下表格。

<form method="get">
    <div class="row">
        <div class="col-md-4">
            <div class="form-group">
                <select asp-for="@Model.MonthCode" asp-items="@Model.InvoiceDates" class="form-control">
                </select>
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                <button type="submit" class="btn btn-success">Update</button>
            </div>
        </div>
    </div>
</form>

我正在使用该get方法(而不是post),因为我不想OnGetAsync()OnPostAsync(). 这两种方法会做完全相同的事情。这样,我不需要OnPostAsync().

但是,缺点是数据作为查询参数传递。

https://localhost:44322/Invoices?MonthCode=24243

我更喜欢这个网址:

https://localhost:44322/Invoices/24243

有没有办法让这段代码产生第二个 URL?我更喜欢我的用户没有得到关于参数是什么的描述。

标签: c#asp.netasp.net-corerazor-pages

解决方案


感觉更清洁的解决方案可能是将代码提取OnGetAsync()到帮助方法中,然后从OnPostAsync().

除非实现OnGetAsync()非常小,否则 Id 通常会避免将过多的逻辑放入页面中。(我们在过去使用 Web 表单(.aspx 页面)进行了尝试,但结果并不好!;-))


推荐阅读