我有一个自定义dll加载到我的Web应用程序中,我更新了它并在我的主Web应用程序中重新加载了引用。基本上它的工作方式是用户上传一个由dll中的函数检查的文件。然后,用户可以单击结果部分上的一个按钮,该按钮重定向到应用程序的主要部分,以便他们可以选择重新运行检查程序;我说部分是因为Web应用程序使用带有两个div的单个页面,一个用于表单,一个用于结果,然后代码将结果div中的表单div的可见性交换,这里是澄清的基本布局。
<body>
<div id="divForm" style="visibility: visible;">
</div>
<div id="divResults">
</div>
</body>
重定向调用位于后面的代码中,如下所示:
protected void btnReturn_Click(object sender, EventArgs e)
{
Response.Redirect("http://localhost/file_checker/");
}
文件检查器的主要部分:
protected void Page_Load(object sender, EventArgs e)
{
divForm.Visible = true;
divResults.Visible = false;
if (Page.IsPostBack)
{
//Do file checking
//Show results
divResults.Visible = true;
divForm.Visible = false;
}
}
Web应用程序在第一次传递时工作正常,但是,在每次后续传递后我都会注意到奇怪的行为。例如,我注意到结果页面显示了旧版dll的陈旧内容,即它显示了由旧版本的dll生成的字符串,我删除了字符串但仍然生成了它。我不确定我是否正确地重定向,或者我是否存在其他一些重定向工作的基本误解。任何帮助或见解都表示赞赏。
更新:
好的,我没有重定向,而是在结果部分清除了gridview并交换了div的样式以显示主要部分并隐藏结果部分,如下所示:
protected void btnReturn_Click(object sender, EventArgs e)
{
//Clear the Gridview and show the upload Form
GridView1.DataSource = null; //<--Is popoulated by a DataTable
divForm.Visible = true;
divResults.Visible = false;
//Response.Redirect("http://localhost/file_checker/");
}
这似乎解决了这个问题,我有一个挥之不去的问题,我正在使用Datatable在结果页面中填充Gridview。在每次页面加载或按钮单击事件后,Datatable是否会自动处理?还是会坚持下去?我只是想避免任何内存泄漏问题,因为每个页面加载实例化一个新的DataTable对象。
答案 0 :(得分:2)
Response.Redirect向浏览器发送302响应。然后,浏览器向新位置发出新请求。所以它不是服务器端操作,浏览器可以缓存响应而不再进行调用。尝试附加查询字符串参数以使浏览器执行真正的请求。如果您有fiddler可用,您可以使用它来验证,但您可能正在从缓存中获取该页面。
protected void btnReturn_Click(object sender, EventArgs e)
{
Response.Redirect(String.Format("http://localhost/file_checker/?{0}", DateTime.Now.Ticks));
}