【问题标题】:Core MVC Multiple Submit button with Form Post not routing as expected带有表单发布的核心 MVC 多次提交按钮未按预期路由
【发布时间】:2020-09-15 11:14:55
【问题描述】:

我有一个编辑模板页面,我们可以根据用户选择编辑、取消或预览模板。我已经为上述功能实现了多个提交按钮。但系统总是路由到 EDIT 操作方法。

它应该路由到这个位置“localhost/templates/Preview”而不是 “本地主机/模板/编辑/预览”

我不知道出了什么问题。

编辑动作方法:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(int TemplateId, TemplateViewModel templateViewModel)
    {
        try
        {

        }
        catch (Exception)
        {

            throw;
        }
    }

预览操作方法:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Preview(TemplateViewModel templateViewModel)
    {
        try
        {

        }
        catch (Exception)
        {

            throw;
        }
    }

<form asp-controller="Templates" enctype="multipart/form-data" id="Form1">
                    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                    <input type="hidden" asp-for="TemplateId" />

<table>
                        <tr>
                            <td style="padding-right:6rem">
                                <input type="submit" value="Save" name="Save" formaction="Edit" class="btn btn-primary" />
                            </td>
                            <td style="padding-right:6rem">
                                <a asp-controller="Templates" asp-action="Index" class="btn btn-primary" style="margin: 5px;">Cancel</a>
                            </td>
                            <td style="padding-right:6rem">
                                <input type="submit" value="Preview" name="Preview" formaction="Preview" class="btn btn-primary" formtarget="_blank" />
                            </td>
                        </tr>
                    </table>
                    </form>

【问题讨论】:

    标签: asp.net-mvc routes asp.net-core-mvc


    【解决方案1】:

    formaction 属性不是 asp 标签助手。如果要使用formaction 属性来处理请求,则必须显式设置要处理请求的控制器操作的地址。例如 - /Templates/Preview 如果您使用的是 [Controller]/[Action] 路由。

    当您使用“预览”作为 formaction 值而没有前导斜杠时,它会将其附加到您所在的当前网址并在那里发送请求。

    另一种选择是使用一个方法来发布请求并接受按钮名称作为参数(它也会发布到服务器)。然后,您可以使用条件逻辑来确定如何处理请求。

    【讨论】:

    • 非常感谢您的宝贵意见,我已按照您的建议使用 /Templates/Preview 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2018-01-07
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多