我正在使用C#的ASP.NET MVC上的Razor。
我正在调用外部网页来处理信用卡,它会返回给我一个收据。然后我会显示收据。
我希望防止他们回到之前的屏幕。
由于这些是.cshtml文件,所以我没有像asp一样的底层cs页面来获取事件。
这个收据页面是一个View,所以我不能在头部放置JavaScript,因为它会影响使用它的每个页面。
有人知道如何在这种情况下防止返回按钮吗?
我正在使用C#的ASP.NET MVC上的Razor。
我正在调用外部网页来处理信用卡,它会返回给我一个收据。然后我会显示收据。
我希望防止他们回到之前的屏幕。
由于这些是.cshtml文件,所以我没有像asp一样的底层cs页面来获取事件。
这个收据页面是一个View,所以我不能在头部放置JavaScript,因为它会影响使用它的每个页面。
有人知道如何在这种情况下防止返回按钮吗?
Redirect(...)
跳转到另一个操作,以避免数据在“刷新”时被重新提交。“pendingCreditCardSubmission”=true
)。一旦他们提交了该请求,你就检查该会话变量。如果为真,则提交该请求并将其设置为假,如果为假或不存在,则向用户发送错误消息。public class NoBackFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.ExpiresAbsolute = DateTime.Now;
filterContext.HttpContext.Response.Expires = 0;
filterContext.HttpContext.Response.CacheControl = "no-cache";
filterContext.HttpContext.Response.Buffer = true;
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow);
filterContext.HttpContext.Response.Cache.SetNoStore();
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
if (!filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.HttpContext.Request.HttpMethod != "POST" && !filterContext.Controller.ControllerContext.IsChildAction)
{
var after = filterContext.HttpContext.Request.RawUrl;
var session = GetSession(filterContext);
if (session["Current"] != null)
{
if (session["Before"] != null && session["Before"].ToString() == after)
filterContext.HttpContext.Response.Redirect(session["Current"].ToString());
else
{
session["Before"] = session["Current"];
session["Current"] = after;
}
}
else
{
session["Current"] = after;
}
}
base.OnActionExecuting(filterContext);
}
private HttpSessionStateBase GetSession(ActionExecutingContext context)
{
return context.HttpContext.Session;
}
}
接下来,您可以将其实施到一般范围或控制器范围中。
[NoCache]
public class WebPageController : Controller
{
public JsonResult JsonError(Exception exception)
{
if (exception == null) throw new ArgumentNullException("exception");
Response.StatusCode = 500;
return new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new
{
error = true,
success = false,
message = exception.Message,
detail = exception.ToString()
}
};
}
RedirectToActionPermanent
。这将向浏览器发送301响应代码。