1

テキストボックス、ドロップダウン、チェックボックスを持つ検索ページにフォームがあります。検索条件を選択して検索ボタンをクリックすると、検索結果が別のページに表示されます。検索結果ページで asp ボタンを使用して検索ページに戻り、フォーム データ (テキスト ボックス、以前に検索用に作成したドロップダウン/チェックボックスの選択など) を保持したい。Session と Viewstate を介して実装したので、これを管理する他の方法を知りたいです。

返信ありがとうございます、
Harish Bhatt

4

4 に答える 4

3

あなたにできることはたくさんあります。

1.Cross Page Scripting

ASP.NET 1.x バージョンで直面する問題の 1 つは、ページ間でデータを簡単に転送できないことです。ASP.NET 1.x ページはデフォルトで同じページにポストバックし、(runat="server" やその他の厄介なものを削除しない限り) 別のページにポストすることはできないため、前のページのコントロールへのアクセスは非常に困難になります。新しいページを指定するためのアクション タグがあり、Request.Form を使用して前のページの値にアクセスできる従来の ASP とは異なります。

ASP.NET 2.0 では、前のページのコントロールにアクセスするより効果的な方法があります。Page の PreviousPage プロパティを使用します。

テキストボックス "Text1" とボタン "Button1" を持つページ Default.aspx があるとします。

次の手順で、別のページから Default.aspx のコントロールにアクセスできます。

A. 次のように、ボタンの PostBackUrl プロパティを新しいページに設定します。

<asp:Button ID="button1" Runat=server Text="submit" PostBackUrl="~/NewPage.aspx" />

B. 次に、NewPage.aspx.cs で、次のように Default.aspx の TextBox コントロールにアクセスできます。

  public void page_load()
    {
    if(!IsPostBack)
    {
    TextBox tb = (TextBox)PreviousPage.FindControl("Text1");
    Response.Write(tb.Text);}
    }

新しい TextBox tb が宣言され、PreviousPage の Control の ID の PreviousPage と FindControl を使用して型キャストされることに注意してください。ただし、新しいページ内のポストバック間で値を保持するには、ポストバック間で値が失われないように、テキストを NewPage.aspx の TextBox または Label に割り当てることをお勧めします。背後にある理由は、同じページにポストバックすると、PreviousPage が無効になるためです。

2.Sessions

以下のリンクでヘルプを参照できます http://asp.net-tutorials.com/state/sessions/ example Session["Value"]="Any Data"; どのページからでもアクセスできます

3.Cookies

Cookie オブジェクトの作成

HttpCookie _userInfoCookies = new HttpCookie("UserInfo");

その中に値を設定する

_userInfoCookies["UserName"] = "Abhijit";
_userInfoCookies["UserColor"] = "Red";
_userInfoCookies["Expire"] = "5 Days";

// 現在の Web 応答に Cookie を追加しています

Response.Cookies.Add(_userInfoCookies);
于 2013-08-22T06:21:12.910 に答える
0

上記の状況については既に説明しました ここでは、検索結果ページ、詳細ページ、およびその他のページから戻るボタンをクリックしたときに検索ページのフォームデータを維持しようとしていました。これを維持するために、 Class を使用しましたSearchCriteria。以下はクラスのサンプルコードです

public class SearchCriteria
{
    private string _strName;
    private string _strCode;

    public string strName
    {
        set { _strName = value; }
        get { return _strName; }
    }

    public string strCode
    {
        set { _strCode = value; }
        get { return _strCode; }
    }
}

すべての検索基準をこのクラスに割り当て、それをセッションに保持して、どこからでもアクセスできるようにしました。

SearchCriteria objSearch = new SearchCriteria();
objSearch.strName =  txtFirstName.Text;
objSearch.strCode = txtCode.Text ;

if (Session["SearchCriteria"] != null)
{
   Session.Remove("SearchCriteria");
   Session["SearchCriteria"] = objSearch;
}
else
{
   Session["SearchCriteria"] = objSearch;
}

検索結果、詳細、その他のページからボタンを1 回クリックして、 PostBack=1Backで検索ページにリダイレクトしていますQueryString

protected void btnBack_Click(object sender, EventArgs e)
{
    Response.Redirect("Default.aspx?PostBack=1", false);
}  

そして、Page_Load検索ページで「QueryString」PostBack をチェックし、QueryString に基づいて、セッションからのコントロールに検索基準を割り当てました。

if (Request.QueryString["PostBack"] != null)
{
    SearchCriteria objSearch = new SearchCriteria();
    if (Session["SearchCriteria"] != null)
    {
         objSearch = (SearchCriteria)Session["SearchCriteria"];
         txtFirstName.Text = objSearch.strName;
        txtCode.Text = objSearch.strCode;
    }
}

さまざまな状況で何が推奨されるかはわかりませんが、知りたいです。あなたのアイデアを共有してください。

Ashish Bahu のおかげで、彼の答えはこれについて私を大いに助けてくれました。

Session または Viewstate を使用せずにこれを行うための他の良い方法を探していましたが、何も見つからず、最終的に上記の解決策になりました。ありがとう!

于 2013-08-23T20:24:56.077 に答える
0

clientstate 情報をデータベースに保存することをお勧めします。データベースは、場合によっては便利です。対応する行と列を定義して、追跡する必要がある状態情報を表すか、db を検索または実行する必要がない限り、すべての状態情報を永続化されたストリーム (json、xml などを使用) に入れることができます。ストリーミングされた値に対する操作。これをデータベースに配置すると、Web ファームへの移行やフェイルオーバーの追加などが簡単になります。clientstate データベース データベースは、スケーラビリティを高めるために、アプリケーションの残りの部分と同じデータベースである必要はありません。sessionstate を使用している場合は、asp.net を構成してセッション状態をデータベースに保持し、同じことを達成することもできます。個人的には、頻繁に使用される clientstates をカスタム テーブルに保存し、少量の clientstate 情報には一般的なストリーミング メソッドを使用します。

秘訣は、状態情報の複数のコピーを同じテーブルに格納する必要がある場合に XKEY が必要な場合に、sessionid をキー (または sessionid + XKEY) として使用することです。たとえば、ストアフロント アプリでは、XKEY はページ番号などを表す場合があります。また、これを使用して一意の XKEY を生成し、XKEY を uri クエリ パラメーター リストに渡します。パラメーターの長いリストではなく、ページ間で XKEY を保持するだけで済みます。

于 2013-08-21T18:07:03.690 に答える