后退按钮导致当前页面回发。 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]
也可以作为您控制器操作的装饰。
我有一个带有 '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]
也可以作为您控制器操作的装饰。