我有一个reporting.aspx页面。如果页面加载没有参数,则显示项目列表,单击其中一个项目将加载带有projectId参数的同一页面,并显示该项目的实际报告。
此报告有两个文本框: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,所以我不会得到回发
似乎都不是一个很好的方式。这样做的好方法是什么?
答案 0 :(得分:2)
您应该只加载数据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
中,因此无需每次都重新加载。
答案 1 :(得分:1)
尝试在!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();
}
}
}