Я думаю, что наконец-то нашел решение для этого.Хотя это не так элегантно, как я надеялся, это работает (что больше, чем я нашел до сих пор).Решение лежит вокруг OnBegin AjaxOption и некоторого Jquery.Мой ActionLink (это также может быть Ajax.BeginForm, к которому он применяется) выглядит следующим образом:
<%= Ajax.ActionLink("Do Ajax Function", "AjaxAction", new { }, new AjaxOptions { OnBegin="check_session", OnSuccess = "ajaxSuccess", UpdateTargetId = "update_container"}, new { })%>
У меня есть действие контроллера в контроллере учетной записи, которое проверяет сеанс, в моем случае я сохраняю пользователяобъект, поэтому я проверяю, является ли он нулевым, и возвращает «True» или «False» в качестве содержимого.OutputCache важен, иначе ваши результаты будут кэшированы.
[OutputCache(Duration=0, VaryByParam="None")]
public ActionResult CheckAjaxSessionExpired()
{
bool _sessionExpired = false;
if (Session["User"] == null)
{
_sessionExpired = true;
}
return Content(_sessionExpired.ToString());
}
Последняя часть - это функция check_session, указанная в качестве обработчика OnBegin.Ajax-вызов Jquery выполняет действие проверки сеанса и проверяет ответ.Если ответ «True» (что означает, что сеанс истек), он устанавливает местоположение страницы обратно на домашнюю страницу (или в данном случае в Google).
function check_session(){
var url = '<%= Url.Action("CheckAjaxSessionExpired", "Account") %>';
//GET CHECK SESSION
$.ajax({
url: url,
success: function(data) {
//alert(data);
if (data == "True"){
document.location = "http://www.google.com";
}
},
error: function() { alert("there was a problem loading the ajax session check"); }
});
}
Есть несколько вещей, которые следует запомнитьесли использовать этот метод.Во-первых, это будет выполняться асинхронно.Если у вас есть код, чувствительный к данным, который вы вызываете, вам все равно нужно будет выполнить проверку на стороне сервера в сеансе.Этот код предназначен для простого перенаправления на страницу входа (или домашнюю страницу), если сеанс истек во время вызова ajax.Во-вторых, функция check_session должна быть подключена к событию OnBegin всех ваших вызовов Ajax.Если у кого-то есть какие-либо советы или предложения по улучшению этого метода, я хотел бы услышать их.Надеюсь, это кому-нибудь поможет.