回发后覆盖的值
本文关键字:覆盖 | 更新日期: 2023-09-27 18:03:23
我有一个报告。aspx页面。如果页面加载时没有参数,它会显示一个项目列表,单击其中一个项目将加载带有投影参数的相同页面,并显示该项目的实际报告。
这个报告有两个文本框:FromDateText和ToDateText。这两个框的文本要么是今天的日期,要么是URL的另外两个参数的值。我的问题是,在按钮调用Response.Redirect之前,它会用今天的日期重新初始化两个框的文本。
一段代码:
protected void Page_Load(object sender, EventArgs e)
{
bool projectIdAvailable = this.Request.QueryString["ProjectID"] != null;
if (!projectIdAvailable)
{
// Load list with buttons
// Each button loads the page again with a ProjectId as parameter
foreach (var project in ListOfAllProjects)
{
var button = new Button
{
Text = project.Name,
PostBackUrl = string.Format("Reporting.aspx?ProjectID={0}", project.Id)
};
MyPanel.Controls.Add(button);
}
}
else
{
// Can't use if (!IsPostBack) as it will always be a postback at this place.
LoadReporting();
}
}
private void LoadReporting()
{
// If we have date as parameter use it, else take today
if (this.Request.QueryString["fromDate"] != null)
{
this.FromDateText.Text = this.Request.QueryString["fromDate"];
}
else
{
this.FromDateText.Text = DateTime.Now.ToShortDateString();
}
if (this.Request.QueryString["toDate"] != null)
{
this.ToDateText.Text = this.Request.QueryString["toDate"];
}
else
{
this.ToDateText.Text = DateTime.Now.ToShortDateString();
}
// Reporting generates a table here...
}
// Refresh the page with date parameters
protected void RefreshButtonClick(object sender, EventArgs e)
{
int projectId = int.Parse(this.Request.QueryString["ProjectID"]);
this.Response.Redirect(
string.Format(
"Reporting.aspx?ProjectID={0}&fromDate={1}&toDate={2}",
projectId,
this.FromDateText.Text,
this.ToDateText.Text));
}
我能想到的最好的解决方案是不在文本框中写入当前日期,这样它就不会覆盖自己,或者我可以使用一点JavaScript,这样我就不会得到回发。
似乎都不是一个很好的方法。做这件事的好方法是什么?
您应该只加载if(!IsPostBack
)数据,而不是每次回发。
protected void Page_Load(object sender, EventArgs e)
{
bool projectIdAvailable = this.Request.QueryString["ProjectID"] != null;
if (!projectIdAvailable)
{
// Load list with buttons
// PostBackUrl = "Reporting.aspx?ProjectID=0"
}
else
{
if(!IsPostBack)
LoadReporting();
}
}
内容默认保存在ViewState
中,因此不需要每次都重新加载。
尝试在!ispostback
内加载。否则,每次回发都会重置该值。
protected void Page_Load(object sender, EventArgs e)
{
bool projectIdAvailable = this.Request.QueryString["ProjectID"] != null;
if (!projectIdAvailable)
{
// Load list with buttons
// PostBackUrl = "Reporting.aspx?ProjectID=0"
}
else
{
if(!IsPostBack)
{
LoadReporting();
}
}
}