1

Ajaxページメソッドを使用するページがあります。ページが最初に読み込まれると、ユーザーは年を選択するように求められます。PostBackが発生するのはこれだけです。年は、SelectedYearという名前のプライベート静的ページレベル整数プロパティに格納されます。クライアントからサーバーにデータを渡すページメソッドはいくつかありますが、年は常にサーバーに保存されるため、再度渡す必要はありません。問題は、サーバーWebMethod内で、SelectedYearプロパティが0に戻っているように見える場合があります。0をテストしてエラーをクライアントに返すことはできますが、なぜ発生したのかを説明できれば役に立ちます。現時点ではわかりません。何か案は?私はこのスタイルのプログラミングに少し慣れていません。これが(非常に単純化された)コードの例です。

これが私のC#サーバーコードです:

public partial class Default : System.Web.UI.Page
{
    private static int SelectedYear;

    protected void YearSelected(object sender, EventArgs e)
    {
        if (sender.Equals(btnCurrentYear))
            SelectedYear = 2013;
        else
            SelectedYear = 2014;
    }

    [WebMethod]
    public static bool Save(string FirstName, string LastName)
    {
        try
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
                //Right here, SelectedYear is sometimes 0.
                SaveApplication(FirstName, LastName, SelectedYear);
            else
                throw new Exception("User is not logged in.");
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}

これが私のJavaScriptクライアントコードです:

function Save(FirstName, LastName) {
    PageMethods.Save(firstName, LastName, SaveSucceeded, SaveFailed);
}

function SaveSucceeded(result) {
    //Notify user that save succeeded.
}

function SaveFailed(error) {
    //Notify user that save failed.
}
4

1 に答える 1

1

あなたの問題はこれです:

 private static int SelectedYear;

を削除する必要がありますstatic。静的とは、グローバルであり、すべてのユーザー/リクエストで共有されることを意味します...したがって、あるユーザーに対して2013に設定し、別のユーザーが1年をまだ選択していないそのページにアクセスすると、0に設定されます。 。両方のために。うわぁ!

ポストバックをトレースして、AJAXメソッド中にその変数に何が起こっているかを確認します。

値をセッション変数に格納するか、ページの非表示フィールドに格納することを検討する必要があります。

同様の投稿の詳細:ASP.NET C#静的変数はグローバルですか?

于 2012-11-21T16:35:05.670 に答える