"后退"按钮导致当前页回发. ASP.Net MVC



我有一个带有"详细信息"操作和"编辑"操作的控制器。 我导航到">编辑"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);
}

如果我导航到编辑并按后退按钮,一切都很好。 但是,如果我按下"保存"按钮,则会提交表单并调用"创建和编辑"操作 - 仍然正常。

"创建与编辑">操作使用:

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

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

然后,如果我再次转到"编辑",然后按返回- 再次调用创建和编辑操作 - 不正常!

当按下"返回">

时,我如何始终返回">详细信息"页面而不调用创建和编辑

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

您可以尝试用

[OutputCache(NoStore=true, Duration=0)]

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

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

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

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

最新更新