以下の画像のように機能する新しい GridView MultiFilter コントロール ( CompositeControl ) を開発しました。
コントロールのプロパティに ViewState を使用しているため、ポストバック後もすべての値が保持されます。ページが再びロードされたときにプロパティをコントロールにロードできるように、リダイレクトする前にコントロール プロパティをセッションに保存したいと考えています。
これを達成する方法について何か提案はありますか?
このリスト ページでは、次の 2 つのことを行う必要があります。
そして、1つの詳細(リダイレクトされた)ページ:
(1) ページの読み込み中に、通常のデータまたは検索された (詳細ページから戻る) データの読み込みを決定する
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.QueryString["back"] != null)
bindDataFirst();
// same data load logic as present
else
bindDataForBack();
// you come back from detail page hence bind search & grid data
}
private void bindDataForBack()
{
strName = Session["SearchName"] == null ? "" : Session["SearchName"].ToString();
// check session search conditions & data and bind
//also bind grid by respective search parameters & search options (top side)
(2)検索 クリック 検索データをセッションに保存
public void btnSearch_Click(object sender, System.EventArgs e)
{
Session["SearchName"] = strName;// store search data into session variables
//bind grid by respective search parameters
(3) リダイレクトされた (詳細) ページで、次のような [戻る] ボタンを設定します。
public void btnBack_Click(object sender, System.EventArgs e)
{
Response.Redirect("ListPage.aspx?back=1");
これがお役に立てば幸いです。これを1つのテキストボックスとグリッドで実装してから、現在のシナリオで試してみることをお勧めします.
これで問題が解決する場合は、この回答を有用とマークしてください。
フォーム送信を使用して別のページにリダイレクトできる場合は、ページのアクション属性を使用して必要なページにフォームを投稿できます。このようにして、すべてのコントロールの値が Request["KEY NAME HERE"] で利用可能になります
<form action="anotherpage.aspx" id="frmData">
<!-- YOUR CONTROLS HERE -->
<input type="submit" value="Submit" />
</fomr>
JSを使用してフォームを送信することもできます
$("#frmData").submit();
ViewState に割り当てるのとほとんど同じ方法で、Session にデータを割り当てることができます。
ViewState と同じように、キーと値のディクショナリです。
元:
Session["someKey"] = "An arbitrary value";