【问题标题】:Call an action method when session ends会话结束时调用操作方法
【发布时间】:2017-06-16 16:31:25
【问题描述】:

我想调用 LogOut 操作方法,因为会话超时,我还没有创建它的视图。

我已经为会话超时编写了一个脚本,但我不知道如何调用操作方法,因为我拥有的所有方法(如 window.location 等)都可以定位视图。

    <script>
            //session end

        var sessionTimeoutWarning = @Session.Timeout;

        var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000-55000;
        setTimeout('SessionEnd()', sTimeout);

    /* Here I want To call that AgentLogOut Method*/

        function SessionEnd() {
            alert("Session Is Going To End in 1 min Please Login Again1");

            window.location = "/Agent/AgentLogIn";
        }
</script>

这是我要调用的目标控制器操作

public ActionResult AgentLogOut()
        {
            string  SessionId = Session["LogInSession"].ToString();
            string OType = "LogOut";
            ProcedureName = "SP_Crud";
            XElement xl = new XElement("data",
                new XAttribute("otype", OType),
                new XElement("sessionId", SessionId),
                new XElement("agentIp", AgentIp)
                );
            objDal.ExecuteNonQuery(ProcedureName, CommandType.StoredProcedure, new MySqlParameter("@xml", xl.ToString()));
            Session.Clear();
            Session.Abandon();

            return RedirectToAction("AgentLogIn","Agent");
        }

我已经尝试了所有我知道的方法。建议我如何只点击操作方法。

【问题讨论】:

  • 您是否在同一个项目中使用了控制器和视图?
  • 你遇到了什么问题?
  • 还带来了一些关于SessionEnd()功能的信息。它会正常工作吗?
  • 您从哪里调用AgentLogOut 操作?您的 js 正在将 window.location 设置为 AgentLogIn 操作
  • @Corporalis 我在会话超时时调用它,以便在会话结束时注册注销时间。

标签: javascript c# asp.net-mvc session actionmethod


【解决方案1】:

然后您可以发出 ajax 请求,例如:

function SessionEnd() 
{
    $.ajax({
    type: "post",
    url: "/Agent/AgentLogIn",
    data:{data:value},
    success:function(response){
    //do some stuff like login page redirection
    },
    error:function(){
    //do some stuff like login page redirection
    }
  });
}

【讨论】:

  • 我已经尝试过了,但这会渲染 LogOut 视图但我没有为 logOut 创建视图。
  • 您可以根据框架的需要创建一个空视图
  • 可以,但也会增加响应时间。
  • 是的,但有时我们必须按照框架的要求做一些事情
【解决方案2】:
  var sessionTimeoutWarning = @Session.Timeout;

    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000-55000;
    setTimeout(function SessionEnd() {
        alert("Session Is Going To End in 1 min Please Login Again1");
       window.location = "/Agent/AgentLogIn";
    }, sTimeout);

    var sessionTimeoutWarning = @Session.Timeout;

    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000-55000;
    setTimeout(SessionEnd, sTimeout);



    function SessionEnd() {
        alert("Session Is Going To End in 1 min Please Login Again1");
        window.location = "/Agent/AgentLogIn";
    }

请注意:您已将 Session.Timeout 设置为整数值

【讨论】:

  • 脚本部分运行良好。告诉我如何调用 action 方法。
  • 你试过 window.location = "/Agent/AgentLogIn";您应该尝试添加项目的基本网址
  • 是的,我已经尝试过了,但这也需要至少有一个视图,但我不想为此创建一个视图,我只想调用该操作方法并将该数据插入数据库。
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多