6

これはおそらくこれまでで最大の初心者の質問ですが、あるメソッドで設定されたプライベート変数が別のメソッドでリセットされる理由について私は混乱しています。私のコードには次のようなものがあります:

namespace Project.Messages
{
public partial class Inbox : System.Web.UI.Page
{

    private static int selectedIndex;
    private static string messageIDString;
    private static int messageID; 

    //select message to view
    protected void viewMessage(object sender, GridViewCommandEventArgs e)
    {
            //get index
            selectedIndex = MsgInbox.SelectedIndex;
            if (int.TryParse(e.CommandArgument.ToString(), out selectedIndex))
            {
                //get selected dataKey, convert to a int
                messageIDString = MsgInbox.DataKeys[selectedIndex].Value.ToString();
                messageID = Convert.ToInt16(messageIDString);
            }
     }

    //select message to delete
    protected void delBTN_Click(object sender, EventArgs e)
    {

        SqlCommand com = new SqlCommand("DELETE FROM Messages WHERE MessageID =    @param1", conn);
        conn.Open();

        com.Parameters.AddWithValue("param1", messageID);
    }

そのため、メッセージをクリックすると、messageIDが設定され、メッセージが表示されます。その後、クリックしてメッセージを削除すると、変数がリセットされているように見えます/以前に設定された値と同じではありません。これを実現するには、静的変数などを使用する必要がありますか?

ありがとう

4

4 に答える 4

6

それが行動です。ポストバックがある場合、すべての変数がリセットされ、再割り当てされます。セッションまたはビューステートを使用するか、すでにビューステートの一部であるページ上のコントロール(非表示フィールドなど)に値を保存できます。

public int messageID
{
   get 
   { 
      int retVal = 0;
      if(ViewState["messageID"] != null)
         Int32.TryParse(ViewState["messageID"].ToString(), out retVal); 

      return retVal;
   }
   set { ViewState["messageID"] = value; }
}
于 2012-10-25T20:26:53.777 に答える
5

これは、C#ではなくASP.NETが原因です。変数をビューステートに保存する必要があります。参照:クラスで初期化された変数は、ページの読み込み時に以前の値を失います

于 2012-10-25T20:25:25.587 に答える
1

Webがステートレスだからです。ページ間でデータを渡すためのいくつかの方法を次に示します。

ASP.net MVC: http ://msdn.microsoft.com/en-us/library/dd394711(v=vs.100).aspx

ASP.netWebフォーム http://msdn.microsoft.com/en-us/library/6c3yckfw(v=VS.100).aspx

お役に立てれば。

于 2012-10-25T20:27:38.487 に答える
1

Sessionオブジェクトを使用して、リクエスト間で必要な情報を保存することもできます。例えば:Session["messageIdString"]=value

詳細情報: http: //msdn.microsoft.com/en-us/library/ms178581 (v = vs.100).aspx

于 2012-10-25T21:51:24.813 に答える