ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:titokani ページごとに有効な変数
困り度:
  • 困っています
こんにちは。
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-transitional.dtd">

<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変数一つですが、実際には可変長の配列となる予定です。よろしくお願いします。
質問投稿日時:08/04/01 11:59
質問番号:3912594
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:osakan_budi 質問にある有効期間の意味がちょっと曖昧です。
別のページに遷移して戻ってきた場合の振る舞いはどうなんでしょうか。1に戻ってもいいのでしょうか。
1に戻ってもよくて、そのページをポストバックしている間のみ有効でいいのであれば、ViewStateを使うのがいいと思います。
あとはSession変数、クッキーあたりが無難じゃないですかね。
種類:補足要求
どんな人:経験者
自信:自信あり
回答日時:08/04/01 14:52
回答番号:No.1
この回答へのお礼はい、お察しのとおり、1に戻ってもいいのです。
というか、むしろ1に戻ったほうが好都合ですね。
ViewStateを試してみましたが、うまくいきそうです。ありがとうございました。