0

基本的に、Default.aspxページにログインコントロールがあり、ユーザーを認証し、有効なユーザー名とパスワードで、別のページUpload.aspxに移動します。

Upload.aspxページで、ユーザー名の値をグローバル変数に格納してから、このグローバル変数をSQLプロシージャの数で渡します。

Upload.aspxページでユーザー名の値を取得するには、page_loadイベントの下にこのコードがあります

public partial class Upload : System.Web.UI.Page 
{   
    public static string uname;
    public static string un;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                un = HttpContext.Current.User.Identity.Name;
                uname = un;

                clsClass find_user_type = new clsClass();
                user_Type = find_user_type.Find_UserType_Of(uname).Trim();
            }
            else
            {
                uname = un;  //the first If condition will be true atleast 1st, 
                             //so that one `un` is set i can copy it into `uname` 
                             //when its postback
            }
        }
}

Find_UserType_Of(uname)は、文字列パラメーター(uname)を受け取るclsClassのメソッドです。

これで、サーバーがローカルホストであるときにローカルマシンで実行している場合、このコードは問題なく実行されます。しかし、これをWebサーバーにアップロードすると、おかしな動作を開始し、

Find_UserType_Of(uname)メソッドには、渡されなかったパラメーターが必要です。

何か考え、何が起こっているのですか?

ありがとう

4

2 に答える 2

4

あなたの最大の問題はstatic変数です。その変数はすべてのリクエストで共有されるため、ページに誰がいるかに応じて値が変化します。リクエストを行ったのはあなただけだったので、ローカルでは気づきませんでした:

public static string uname;
public static string un;

代わりに

private string uname;
private string un;

ページレベルのプライベート静的プロパティにアクセスするAjax PageMethodでの私の応答で、より多くの説明を見つけることができます

また、これをプライベート変数で読みたいと思うかもしれません.

更新: の値を設定していないため、ポストバックにも問題がありますun。ポストバック後も、 を設定unするか、単に を使用する必要がありますHttpContext.Current.User.Identity.Name

于 2013-01-08T18:26:05.463 に答える
0

ASP.NET アプリケーションへのリクエストごとに、 の新しいインスタンスが作成されます。System.Web.UI.Pageこの場合はUploadです。つまり、すべての変数は、それを使用するすべてのリクエストで設定する必要があります。ViewStateを使用して、Web ページに状態があるように動作させることで、この制限を回避できます。

または、グローバル変数の場合はApplication辞書を使用します:Application["uname"] = HttpContext.Current.User.Identity.Nameユーザーの場合はSession辞書を使用しSession["uname"] = HttpContext.Current.Identity.Nameます。

于 2013-01-08T19:10:50.550 に答える