我有一个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”按钮始终在那里。
答案 0 :(得分:2)
由于您要重定向到同一页面,因此它不是回发,视图状态丢失,并且必须重新绑定内容。
很可能,只需将DropDownLists的值放入缓存中,然后就可以从缓存中加载,只有在缓存中才会命中文件系统。
答案 1 :(得分:0)
推荐评论回答:
Request.UrlReferrer