后退按钮会导致当前页面回发。 ASP.Net MVC

时间:2018-05-03 08:21:12

标签: c# asp.net asp.net-mvc razor back-button

我有一个带有'细节的控制器'行动和'编辑'行动。 我使用View();导航至修改,然后呈现包含部分视图的页面。

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

@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);
}

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

CreateAndEdit 操作使用:

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

再次导航至详细信息页面。

然后,如果我去&#34;编辑&#34;再次按返回 - 再次调用 CreateAndEdit 操作 - 不行!

我怎样才能总是回到&#34;细节&#34;按下后退时未调用 CreateAndEdit 的页面。

2 个答案:

答案 0 :(得分:1)

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

作为解决方法,如果只能从“详细信息”页面访问“CreateOrEdit”页面,只需直接重定向到“详细信息”页面,而不是浏览浏览器历史记录。

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

答案 1 :(得分:1)

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

您可以尝试使用

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

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