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