2

だから私はコードを持っています..

int var1 = 0;

protected void cmdvar1_Click(object sender, EventArgs e)
    {
        var1= var1+ 10;
        lblvar1.Text = var1.ToString();
    }

そして、これをクリックすると、素晴らしい..intを取り、それに10を追加してから表示します..しかし、10以上は表示されません。いくつか遊んで、結論に達しました。ラベルは更新されていません。変数の前の 10 に 10 を追加しているだけではありません。私は何を間違っていますか?私は何が欠けていますか?変数情報を Cookie などに保存する必要がありますか?

4

5 に答える 5

2

そのため、別のプラットフォームを検討することを強くお勧めします。おそらくASP.NET MVC...ただし、次のようなものを使用して問題を回避できます。

private int MyNum
{
   get{ return (int)ViewState["MyNum"] ?? 0; }
   set { ViewState["MyNum"] = value; }
}

次に、増加する整数として MyNum を使用します。

于 2013-06-20T21:50:26.860 に答える
1

コメントで示唆されているように、意味のある Web アプリケーションを作成する前に、ユニバースをステートレスにラップする必要があります。

状態のような動作を実現するための ASP.NET の等価物は、すべての Web ページで使用できる Session コレクションを使用することです。

protected void cmdvar1_Click(object sender, EventArgs e)
{
   int var1 = (int)Session["yourInteger"];
   var1 += 10;
   Session["yourInteger"] = var1;
   lblvar1.Text = var1.ToString();
}

明らかに、Session["yourInteger"] の初期値を別の場所に 1 回だけ設定しています。

Session の問題は、アプリケーションが潜在的にバグが多く、スケーラブルでなくなる可能性があることです。使用すればするほど、両方のアカウントで悪化します。

于 2013-06-20T21:54:08.927 に答える
1

セッション本体を使用します。HTTP はステートレス プロトコルです。ポストバックすると、現在の変数値が失われます。

解決策:

int var1=0;
protected void cmdvar1_Click(object sender, EventArgs e)
    {

if(Session["var1"]!=null)
var1=int.Parse(Session["var1"].ToString());
else
var1=0;
        var1= var1+ 10;
        lblvar1.Text = var1.ToString();
Session["var1"]=var1;
    }
于 2013-06-20T21:50:23.033 に答える
1

lblvar1 が Label コントロールであると仮定すると、次のことができます。これが機能する理由は、.NET が UIControl の状態を自動的に処理するためです。

protected void cmdvar1_Click(object sender, EventArgs e)
    {
        var var1 = Convert.ToInt32(lblvar1.Text);
        var1= var1+ 10;
        lblvar1.Text = var1.ToString();
    }
于 2013-06-20T21:50:37.990 に答える