在BackBack上清除QueryString [英] Clear QueryString on PostBack
问题描述
一个简单的问题,但是我不知道该怎么做.我有一个带有GridView的页面,该页面最初是由querystring填充的.
Simple question, but I can't figure out how to do it. I have a page with GridView which is populated initially with a querystring.
获得查询字符串值后,不需要查询字符串,因为我使用DropDownList的值来填充GridView.
After I get the querystring values, I don't need the querystring, because I use value of an DropDownList for populate the GridView.
我如何摆脱它?
回发并不会清除它,只是保持标记.
A postback doesn't clear it, it just keeps tagging along.
我尝试了Request.QueryString.Clear,但出现只读"错误.
I tried Request.QueryString.Clear, but get "readonly" errors.
对于您在解决此问题方面所能提供的帮助,我将不胜感激.
I would greatly appreciate any help you can give me in working this problem.
编辑1
using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Globalization;
using System.Threading;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
public partial class GV : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
my_DDL();
GridViewBind();
}
}
protected void my_DDL()
{
.......
}
protected void DDL_SelectedIndexChanged(object sender, EventArgs e)
{
PropertyInfo Isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
Isreadonly.SetValue(Request.QueryString, false, null);
Request.QueryString.Clear();
}
public DataTable GridViewBind()
{
//here use in the query the value of querystring or DDL value
}
}
编辑2
using System;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class GV : System.Web.UI.Page
{
OdbcConnection myConnectionString =
new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString);
OdbcDataAdapter dadapter;
DataSet dset;
DataTable dt = new DataTable();
string sql1;
string sql2;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RTD_DDL();
if (Request.QueryString["RTD"].ToString() != "")
{
RTD.SelectedValue = Request.QueryString["RTD"].ToString();
}
if (Request.QueryString["Month"].ToString() != "")
{
MonthYear.SelectedValue = Request.QueryString["Month"].ToString();
}
GridViewBind();
}
}
protected void MonthYear_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewBind();
}
protected void RTD_DDL()
{
RTD.AppendDataBoundItems = true;
string strQuery = " SELECT ... ; ";
OdbcCommand objCmd = new OdbcCommand(strQuery, myConnectionString);
objCmd.CommandType = CommandType.Text;
objCmd.CommandText = strQuery;
try
{
myConnectionString.Open();
RTD.DataSource = objCmd.ExecuteReader();
RTD.DataTextField = "RTD1";
RTD.DataValueField = "RTD";
RTD.DataBind();
RTD.Items.Add(new ListItem("------", ""));
RTD.Items.Add(new ListItem("1", "1"));
RTD.AppendDataBoundItems = true;
GridViewBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
myConnectionString.Close();
}
}
protected void RTD_SelectedIndexChanged(object sender, EventArgs e)
{
MonthYear.Items.Clear();
MonthYear.Items.Add(new ListItem("------", ""));
MonthYear.AppendDataBoundItems = true;
if (RTD.SelectedItem.Value == "1")
{
sql1 = " SELECT ... ; ";
}
else
{
sql1 = " SELECT ...; ";
}
OdbcCommand objCmd = new OdbcCommand(sql1, myConnectionString);
objCmd.Parameters.AddWithValue("?", RTD.SelectedItem.Value);
objCmd.CommandType = CommandType.Text;
objCmd.CommandText = sql1;
objCmd.Connection = myConnectionString;
try
{
myConnectionString.Open();
MonthYear.DataSource = objCmd.ExecuteReader();
MonthYear.DataTextField = "value1";
MonthYear.DataValueField = "value2";
MonthYear.DataBind();
GridViewBind();
if (MonthYear.Items.Count > 1)
{
MonthYear.Enabled = true;
}
else
{
MonthYear.Enabled = false;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
myConnectionString.Close();
}
}
public DataTable GridViewBind()
{
sql2 = " SELECT ... ; ";
try
{
dadapter = new OdbcDataAdapter(sql2, myConnectionString);
if (Request.QueryString["RTD"] != "")
{
dadapter.SelectCommand.Parameters.Add("param1", Request.QueryString["RTD"].ToString());
}
if (RTD.SelectedIndex != 0)
{
dadapter.SelectCommand.Parameters.Add("param1", RTD.SelectedValue.ToString());
}
dadapter.SelectCommand.Parameters.Add("param2", MonthYear.SelectedValue.ToString());
dset = new DataSet();
dset.Clear();
dadapter.Fill(dset);
DataTable dt = dset.Tables[0];
GridView1.DataSource = dt;
GridView1.DataBind();
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
dadapter.Dispose();
dadapter = null;
myConnectionString.Close();
}
}
}
推荐答案
该 可能就是您想要的(它使用System.Reflection)
This may be what you are looking for (it uses System.Reflection)
PropertyInfo Isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
Isreadonly.SetValue(Request.QueryString, false, null);
Request.QueryString.Clear();
这篇关于在BackBack上清除QueryString的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!