プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
ASP.NET2.0+C#で開発しています。
こういった表現でよいのか、いまいち自信がないのですが、ページごとに有効な変数が欲しい場合には、どうすればよいのでしょうか?

例えば、カウンタを実現しようとして、
.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Count.aspx.cs" Inherits="Count" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
「<asp:Label ID="Num" runat="server" />」<br />
<asp:Button ID="CountButton" runat="server" OnClick="Count_Click" Text="カウント" />
</form>
</body>
</html>
.aspx.cs
public partial class Count : System.Web.UI.Page
{
int count;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
count = 0;
Num.Text = count.ToString();
}
}
protected void Count_Click(object sender, EventArgs e)
{
count++;
Num.Text = count.ToString();
}
}
と、した場合、countは毎回初期化されてしまうため、ブラウザ上の表示は1から先に進みません。
かといって、
static int count;
とすると、複数のブラウザでページを開いた場合に、値を共有してしまいます。
表示が進み、かつ値を共有しないようにするためには、どのような手法を用いればよいのでしょうか?

なお、今回は実験のため、int変数一つですが、実際には可変長の配列となる予定です。よろしくお願いします。

A 回答 (1件)

質問にある有効期間の意味がちょっと曖昧です。


別のページに遷移して戻ってきた場合の振る舞いはどうなんでしょうか。1に戻ってもいいのでしょうか。
1に戻ってもよくて、そのページをポストバックしている間のみ有効でいいのであれば、ViewStateを使うのがいいと思います。
あとはSession変数、クッキーあたりが無難じゃないですかね。
    • good
    • 0
この回答へのお礼

はい、お察しのとおり、1に戻ってもいいのです。
というか、むしろ1に戻ったほうが好都合ですね。
ViewStateを試してみましたが、うまくいきそうです。ありがとうございました。

お礼日時:2008/04/02 10:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!