我有一个带有转发器控件的aspx页面,用于显示数据。用户可以修改转发器内的数据,但是在点击SAVE按钮之前数据不会被保存。 我的页面上还有一个UNDO按钮。如果用户单击此按钮,我想重新加载页面并丢弃用户所做的更改(类似于MS Office中的UNDO功能) 我需要向他展示第一次加载页面时显示的相同数据。
请帮助我。
谢谢!
答案 0 :(得分:12)
这行代码按原样读取url,并将您重定向到同一页面,不带新帖子。将它放在按钮上,点击后面的代码。
Response.Redirect(Request.RawUrl);
P.S。如果您只是发帖,输入控件将保留其数据,因此您需要使用重定向从头开始重新加载页面。如果您不进行重定向,则需要处理控件并清除它们。
另外,您可以避免回发到服务器并在客户端执行相同操作,并使用javascript代码调用OnClientClick="return ReloadPage();"
:
function ReloadPage()
{
top.location.replace( updateURLParameter(document.location.href, "_rnd", Math.random()) );
return false;
}
//
// this function is an improved version of
// http://stackoverflow.com/a/10997390/159270
//
function updateURLParameter(url, param, paramVal)
{
var TheAncor = null;
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var temp = "";
if (additionalURL)
{
var tmpAncor = additionalURL.split("#");
var TheParams = tmpAncor[0];
TheAncor = tmpAncor[1];
if(TheAncor)
additionalURL = TheParams;
tempArray = additionalURL.split("&");
for (i=0; i<tempArray.length; i++)
{
if(tempArray[i].split('=')[0] != param)
{
newAdditionalURL += temp + tempArray[i];
temp = "&";
}
}
}
else
{
var tmpAncor = baseURL.split("#");
var TheParams = tmpAncor[0];
TheAncor = tmpAncor[1];
if(TheParams)
baseURL = TheParams;
}
if(TheAncor)
paramVal += "#" + TheAncor;
var rows_txt = temp + "" + param + "=" + paramVal;
return baseURL + "?" + newAdditionalURL + rows_txt;
}
上面的代码是在url的末尾添加一个随机数,或者如果存在则更新它以避免将页面保留在缓存中。如果您都准备避免将页面保留在缓存中,则可以使用额外的随机参数执行相同操作。
答案 1 :(得分:0)
你可以在事件处理程序中添加一个没有代码的提交按钮,这将触发页面加载,除了重新加载页面之外不会执行任何操作。
答案 2 :(得分:0)
我建议您使用ViewState保存DataTable
protected void Page_Load (object sender, EventArgs e)
{
if(!isPostBack)
{
DataTable Dt = new DataTable();
ProcessIt();//I assume you know better how to process your data)
ViewState("Tbl") = Dt;
}
}
protected void BtnSave_Click (object sender, EventArgs e)
{
SaveIt();//Save your changes first
ViewState("Tbl") = Dt;//store back the datatable
}
protected void BtnCancel_Click (object sender, EventArgs e)
{
DataTable Dt = ViewState["tbl"];
GridView.DataSource = Dt;
GridView.DataBind();
}
我希望这会给你一个想法!