我有一个带有'细节的控制器'行动和'编辑'行动。
我使用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 的页面。
答案 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]
也可以作为控制器操作的装饰。