【问题标题】:Best practice for URL redirection in ASP.NET web applicationASP.NET Web 应用程序中 URL 重定向的最佳实践
【发布时间】:2010-02-03 15:32:08
【问题描述】:

我有一个显示两个文本文件之间差异的 asp 页面 (Default.aspx)。它包含两个下拉列表(分别为 ID="File1" 和 "File2")和一个按钮(ID="Submit")。

它还包含一个 ID 为“Result”的 Literal 控件。

列表按钮的内容是根据物理应用程序路径中存在的文件填充的。

每次单击提交按钮时,我想在 Literal 控件中给出差异/比较的结果,所以我有一个这样的事件处理程序:

protected void Submit_Click(object sender, EventArgs e)
{
    Result.Text = CompareFiles(File1.SelectedValue, File2.SelectedValue);
}

这样做的问题是您无法为特定文件之间的比较结果添加书签。

为了解决这个问题,我将选择用于比较的文件的值作为查询字符串附加到 URL 并执行重定向。因此,将上述事件处理程序更改为如下所示:

protected void Submit_Click(object sender, EventArgs e)
        {
            string build1 = DropDownList1.SelectedValue;
            string build2 = DropDownList2.SelectedValue;

            string queryString = 
                String.Format("?file1={0}&file2={1}",HttpUtility.UrlEncode(build1),HttpUtility.UrlEncode(build2));

            string redirectionUrl = Request.Url.AbsolutePath + queryString;

            Response.Redirect(redirectionUrl, true);
        }

因此在“Page_Load”事件处理程序中调用了“CompareFiles”方法。所以现在,您可以为比较结果添加书签并直接再次加载,因为 URL 将包含要比较的文件。

但问题是每次重定向发生时“IsPostBack”属性都是假的。因此,DropDownLists(物理应用程序目录中的文件)的值每次都会被评估。

如果是来自同一页面的重定向,我不希望这种情况发生。我怎样才能做到这一点?我只希望页面是第一次访问或从其他页面访问时发生。

这是一种不好的做法吗?我的意思是重定向到同一页面。我可以通过在不同的页面中给出结果来避免这个问题,但我想这样做,因为我希望 DropDownLists 和“提交”按钮始终存在。

【问题讨论】:

    标签: asp.net web-applications query-string response.redirect


    【解决方案1】:

    由于您将重定向到同一页面,因此它不是回发,视图状态丢失,并且必须重新绑定内容。

    很有可能,只需将 DropDownLists 的值放入缓存中,然后您可以从缓存中加载,如果不在缓存中,则仅访问文件系统。

    【讨论】:

      【解决方案2】:

      推荐评论回答:

      Request.UrlReferrer
      

      【讨论】:

      • 我会在这里修改你的笔记,每次都是新的页面请求,他每次都必须加载下拉。
      • 如果 Page_Init 事件处理程序看起来像你给的那个,那么在这种情况下一个书签页面是打开的。然后只会渲染结果,不会进行下拉列表的渲染和评估。在任何情况下,每次发生重定向时都会调用 Page_Init 事件处理程序和 Page_Load 事件处理程序。所以无论我把代码放在哪里,每次我重新加载它们都会被执行。问题归结为如何检测从同一页面触发的重定向。
      • 是的。我设法通过 Request.UrlReferrer 实现了我想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2012-06-06
      相关资源
      最近更新 更多