1

我有一个显示两个文本文件之间差异的 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 和“提交”按钮始终存在。

4

2 回答 2

2

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

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

于 2010-02-03T15:42:36.213 回答
0

推荐评论回答:

Request.UrlReferrer
于 2010-02-03T15:36:22.840 回答