0

私の上級プロジェクトは、ASP.NET / C#で予約システムを構築することです。私のシニアプロジェクトの一部は、c#クラスを持つことです(そして基本的に、過去数年間に学んだすべてのものを使用します)。私がやろうとしていることの1つは、新しい「ユーザー」クラスをインスタンス化した後、ページ間を移動するために必要なことです。セッション状態には変数が含まれていることがわかっているので、「Session["blah"]」と入力するだけでセッション状態が機能することがわかりました。メンバーにアクセスできます。しかし、私はそれが起こっているのを見ていません。セッションの状態はHTTPコンテキストであることに気付いたので、とにかく機能するとは思えませんでした。しかし、毎回新しいユーザークラスをインスタンス化せずに、必要なことを達成できる他の方法はありますか?私はそのウェブページを知っています...しかし、私はそれをできるだけ機能的なオンラインプログラムにしようとしています。

ちょうどコーダーのために、ここにコードスニペットimが動作しています:

    cDatabaseManager cDM = new cDatabaseManager();

    string forDBPass = Encryptdata(pass_txt.Text.ToString());
    string fullName = fname_txt.Text.ToString() + " " + lname_txt.Text.ToString();

    cDM.regStudent(email_txt.Text.ToString(), forDBPass, fullName, num_txt.Text.ToString(), carrier_ddl.SelectedValue.ToString(), this);

    //ADD - getting a cStudent
    cUser studentUser = new cStudent(fullName, forDBPass, email_txt.Text.ToString());

    //ADD - session states
    Session["cStudent"] = studentUser;

    //Session["cStudent"].      //session state will not work with what I am doing
    //ADD - transfer to campus diagram

前もって感謝します!!

編集:

投稿・コメントしてくださった皆様、ありがとうございました!私はこの短い議論から多くを学びました。あなたの答えはすべて私が理解するのに役立ちました!

4

3 に答える 3

4

セッションはアイテムをオブジェクトとして保存します。クラスがObjectから継承している限り(それは継承します)、そこに格納できます。注意点として、シリアル化を使用してそのオブジェクトを格納するため、クラスはシリアル化可能である必要があります。

次のように、クラスにプロパティを追加します。

public cStudent CurrentStudent
{
    get {
        if(Session["CurrentUser"] == null)
            return null;

        return (cStudent)Session["CurrentUser"];
    }
    set {
        Session["CurrentUser"] = value;
    }
}
于 2013-02-12T19:00:58.947 に答える
4

あなたのコメントから:

問題は、入力"Session["cStudent"]."すると関数にアクセスできないことです。例:Session["cStudent"].getName()私の機能を提供しません。

これは、 sを設定/返すための[]インデクサーが原因です。コンパイラは、オブジェクトが格納されていることを認識しないため、キャストなしでプロパティに直接アクセスすることはできません。SessionobjectcUser

string name = ((cUser)Session["cStudent"]).getName();

ここでうまくいかない可能性のあることが2つあります。

  1. もしそうなら、あなたSession["cStudent"]null得るでしょうNullReferenceException
  2. そうSession["cStudent"]でない場合はcUserInvalidCastException

これらの条件を確認し、いずれかが当てはまる場合は適切に対応する必要があります。

また、他の人が指摘しているように、状態で保存するには、cUserクラスにとしてマークを付ける必要があります。SerializableSession

于 2013-02-12T19:26:46.643 に答える
2

セッション状態からオブジェクト値を取得するときは、適切なタイプにキャストします。

[Serializable]    
public class student
    {
      public string FirstName { get; set; }
      public string LastName { get; set; }
    }

Page1:

student s1 = new student();
s1.FirstName ="James";
s1.LastName = "Bond";
Session["blah"] = s1;

そして、2ページのSession["blah"]にアクセスしたいとき

student s2 = (Session["blah"] !=null ? (student)Session["blah"] : null);

これで、s2のプロパティにs2.FirstName、s2.LastNameとしてアクセスできます。

于 2013-02-12T19:11:40.967 に答える