0

VWD 2010 で C#、asp.net を使用。

site.master に手動で割り当てられたセッション変数があります (テスト目的で)。値を次のように設定しました: Session["userid"] = (int) number

私のWebページには、次のコードがあります。

        litmsg.Text = "userid = " + Session["userid"].ToString();

        if (string.IsNullOrEmpty(Session["userid"] as string))
        {
            Session["errmsg"] = "No user ID is specified";
            litmsg.Text = litmsg.Text + "   inside loop";
          //  Response.Redirect("/PageError.aspx");
        }
        return;

実行中、litmsg.Text の値は正しいユーザー ID です。これは、Session["userid"] に値が必要であることを示しています。ただし、値がある場合、string.IsNullOrEmpty() は false を返す必要があります。これは、本体が実行されないことを意味し、「ループ内」というフレーズが表示されないようにする必要があります。

string.IsNullOrEmpty() も PageError ページで失敗するようです:

 protected void Page_Load(object sender, EventArgs e)
 {
        if (!Page.IsPostBack)
        {
            string strErrMess = string.IsNullOrEmpty(Session["errmess"] as string) ? 
                   "Unspecificed error message" :
                    Session["errmess"].ToString();

            errmess.Text = strErrMess;
        }
}

この場合、Session["errmess"] に値を設定した場合でも、不特定のメッセージが報告されます。

問題は、私がこのイディオムを他のコンテキストで使用していて、それが機能しているように見えることです。それをセッション変数に適用した場合にのみ、問題が発生します。欠けているものはありますか

以前のバージョンの関数でセッション変数を使用した場合のバグへの参照を見つけましたが、それらの参照はバグが現在のバージョンで修正されたことを示しています。たとえば、次のようになります: C# String.IsNullOrEmpty: 良いか悪いか?

私はこのイディオムが好きで、すでに他の場所で使用しています。これを行うより良い方法はありますか?機能するもの?あるいは、私は何か間違ったことをしているのかもしれません。

4

2 に答える 2

3

試す:

string strErrMess = (Session["errmess"] == null)
    ? "Unspecificed error message" 
    : Session["errmess"].ToString();

nullかどうかをテストする前に文字列としてキャストしているため、エラーがスローされています。

于 2013-10-28T13:55:29.503 に答える