ASP.NET Web应用程序中URL重定向的最佳实践

时间:2010-02-03 15:32:09

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

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

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

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

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

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”属性为false。因此,每次都会评估DropDownLists(物理应用程序目录中存在的文件)的值。

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

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

2 个答案:

答案 0 :(得分:2)

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

很可能,只需将DropDownLists的值放入缓存中,然后就可以从缓存中加载,只有在缓存中才会命中文件系统。

答案 1 :(得分:0)

推荐评论回答:

Request.UrlReferrer
相关问题