使用ASP.NET中的不同重定向参数重定向到同一页面

时间:2016-03-20 19:23:52

标签: c# asp.net response.redirect

这个我正在制作的页面基本上接受了用户对日期的请求,并将在该日期做一些选择查询(但是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日并点击s​​etDate按钮

重定向回到2016年3月14日当且仅当我将txtDate.Text设置为当前参数(03/16/2016)时,否则它会正确地重定向到新的Date参数

1 个答案:

答案 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事件的第一个游览,然后是您的重定向的第二个游览。单击按钮后,您将获取查询参数并在查询字符串更改之前将其设置为文本框。这就是为什么如果删除该行,所有工作正常的原因。您需要做的就是检查它是否是回发。

相关问题