这个我正在制作的页面基本上接受了用户对日期的请求,并将在该日期做一些选择查询(但是db部分并不重要)。有一个文本框(txtDate)和一个按钮(setDate)用于重定向到同一页面,其中txtDate中的字符串作为URL中的Date参数。在PageLoad上,我想获取当前的QueryString [Date]并将其放回txtDate(这样用户可以看到选择了什么日期),但是,每当我将该文本框设置为新的时,它会自动请求旧的QueryString I&请求。令我困惑的是。
这是Page_Load:
String dateInput = null;
dateInput = Request.QueryString["Date"];
txtDate.Text = dateInput.Replace("-", "/"); //if I just comment this out, it works perfectly fine
这是按钮点击:
String s = null;
s = txtDate.Text.Replace("/", "-");
if (s == "") //if empty sends the current date
{
Response.Redirect("Default.aspx?Date=" + DateTime.Today.ToString("MM-dd-yyyy"));
}
else //sends the users date
{
Response.Redirect("Default.aspx?Date=" + HttpUtility.UrlEncode(s));
}
我不知道我是否能很好地解释这一点,但它的工作原理如下:
3/14/2016当前日期参数
将新日期放入txtDate:2016年3月16日并点击setDate按钮
重定向回到2016年3月14日当且仅当我将txtDate.Text设置为当前参数(03/16/2016)时,否则它会正确地重定向到新的Date参数
答案 0 :(得分:2)
自从我尝试使用WebForms已经很长时间了,但是如果我是对的,你需要在更新文本框之前检查它是否是Postback。
所以基本上只包装你的
txtDate.Text = dateInput.Replace("-", "/"); //if I just comment this out, it works perfectly fine
里面的
if (!Request.IsPostback)
{
txtDate.Text = dateInput.Replace("-", "/"); //if I just comment this out, it works perfectly fine
}
总结一下......这里发生的事情只是你的Page_load事件发生了两次。您的button_click事件的第一个游览,然后是您的重定向的第二个游览。单击按钮后,您将获取查询参数并在查询字符串更改之前将其设置为文本框。这就是为什么如果删除该行,所有工作正常的原因。您需要做的就是检查它是否是回发。