后退按钮导致当前页面回发。 ASP.NetMVC

Back button causes current page postback. ASP.Net MVC

我有一个带有 'Details' 动作和 'Edit' 动作的控制器。 我使用 View(); 导航至 Edit,然后呈现具有局部视图的页面。

在局部视图中有一个表格:

@using (Html.BeginForm("CreateOrEdit", "Licenses", FormMethod.Post, new { @class = "pure-form pure-form-aligned", id = "change", onsubmit = "process(this);" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <div class="floatLeft width100per">
        @Html.HiddenFor(model => model.Id)
        @Html.HiddenFor(model => model.CustomerId)

        <button onclick="goBack()" type="button" class="pure-button pure-button-primary newButton">Back</button>
        <input type="submit" value="Save" class="pure-button pure-button-primary newButton marginRight10" onclick="getModules(); setGuid('@Guid.NewGuid()');" />
        <div class="floatLeft pure-form">

goBack() 函数:

function goBack() {
    history.go(-1);
}

如果我导航到 编辑 并按后退按钮,一切都很好。 但是,如果我按下 Save 按钮,将提交表单并调用 CreateAndEdit 操作 - 仍然可以。

CreateAndEdit 操作使用:

RedirectToAction("Details", new { id = license.Id });

为了再次导航到详细信息页面。

然后,如果我再次转到 "Edit" 然后按 返回 - CreateAndEdit 操作被再次调用 - 不正常!

当按下 返回 时,我如何总是返回到 "Details" 页面而不调用 CreateAndEdit

我认为您看到的行为是标准的浏览器行为。提交表单后,如果您再按浏览器的 "Back" 按钮(与 history.go(-1); 相同),将重新提交表单。

作为变通方法,如果 "CreateOrEdit" 页面只能从 "Details" 页面访问,只需直接重定向到 "Details" 页面,而不是浏览浏览器历史记录。

function goBack() {
    location.href = '@Html.Raw(Url.Action("Details", "Licenses",  new { id = Model.License.Id }))';
}

您需要为您不希望用户因表单提交等原因返回的页面禁用缓存。

您可以尝试用

装饰路线
[OutputCache(NoStore=true, Duration=0)]

我相信 [NoCache] 也可以作为您控制器操作的装饰。