【问题标题】:ASP.Net C# - Postback and Session objectsASP.Net C# - 回发和会话对象
【发布时间】:2023-03-15 21:19:01
【问题描述】:

我想检查 Session 对象,如果不存在,将用户重定向到 index.html。

关于下面的两段代码,我想知道什么时候应该使用另一段代码?

我认为我应该一直使用版本 1,但我不确定。

版本 1:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Session.Count == 0)
        {
            Response.Redirect("~/index.html");
        }
        else
        {
            //code
        }
    }
}

版本 2:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session.Count == 0)
    {
        Response.Redirect("~/index.html");
    }
    else if (!Page.IsPostBack)
    {
        //code
    }
}

编辑:感谢您的回复。我认为这两个条件不应该联系起来,两个 if 语句是最合适的(在我的情况下)。

【问题讨论】:

  • 你应该把你的问题移到codereview.stackexchange.com,无论如何要求回发是一种矫枉过正,因为你想执行重定向我会坚持解决方案2
  • 它们做不同的事情,它们不是相同功能的不同版本。如果它是回发(在您的第一个示例中),则评估会话的 if 语句将永远不会被命中。

标签: c# asp.net session postback session-variables


【解决方案1】:

基本上,您的会话检查和回发检查是两个不同工作流程的一部分,可以这么说。因此,将它们链接在一个 if-else 块中可能只会让未来的代码阅读器感到困惑。我建议第三个版本:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session.Count == 0)
    {
        Response.Redirect("~/index.html");
        return;
    }

    if (!Page.IsPostBack)
    {
        //code
    }
}

这里两个检查是分开的,代码流看起来更透明。

【讨论】:

  • 在 OP 确认他想要进行评估的顺序之前,我认为无法回答这个问题。这不是一个真正值得提出的问题,因为他在问他应该编码什么(就它应该如何运作而言)。
【解决方案2】:

这实际上取决于您要达到的目标。版本 1 永远不会在回发时重定向,即使 Session.Count == 0。如果不知道您想要完成什么,就不可能告诉您使用哪一个。

【讨论】:

  • 这是唯一没有将 OP 发送到 stackexchange 的代码审查的答案。
【解决方案3】:

嗯,这取决于。那里的逻辑略有不同。

版本 1 仅在不是 Postback 操作时才会重定向,即当用户未提交表单时。

如果用户提交表单或请求页面,版本 2 将重定向。

我会选择选项 3:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session.Count == 0)
    {
        Response.Redirect("~/index.html");
        return; //return here so this logic isn't mixed with the postback logic.
    }

    if (!Page.IsPostBack)
    {
        //code
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2013-10-19
    • 2010-12-17
    • 2016-01-05
    相关资源
    最近更新 更多