3

そのようなWebフォームアプリケーションがあります。

public partial class MyPage : Page
{
    private static bool _changed = false;

    protected void btnSave_Click(object sender, EventArgs e)
    {
         if(_changed)
         {
             //some code here
         }
    }

    protected void btnCancel_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/MyPage.aspx");
    }

    protected void dropdownlist_SelectedIndexChanged(object sender, EventArgs e)
    {
        _changed = true;  
    }
}

だから私がやろうとしていることの要点は、ドロップダウンリストと保存ボタンを含むフォームがあるということです。ユーザーがドロップダウン リストを変更した場合は、プライベート ブール値changedを true に設定します。デフォルトでは、false です。

私が理解していない何らかの理由で、メソッドにアクセスしたことがなくても、changedメソッドに到達すると true になります。これは、コード内で true に設定される唯一の場所です。btnSave_clickdropdownlist_selectedIndexChangedchanged

マークアップ:

<asp:DropDownList ID="myDropDown" runat=server" OnSelectedIndexChanged="dropdownlist_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Value="True">Yes</asp:ListItem>
<asp:ListItem Value="False">No</asp:ListItem>

<asp:Button ID="btnSave" Text="Save" OnClick="btnSave_Click" runat="server" />
4

2 に答える 2

8

すべてのリクエストstaticで共有されるフィールド変数を使用してもよろしいですか? したがって、UserA がドロップダウンで何かを選択すると、UserB も= true になります。_changed

ViewState代わりにまたはSession変数を使用することもできます。たとえば、次のようになります。

private bool HasChanged
{
    get { object b = ViewState["HasChanged"] ?? false; return (bool)b; }
    set { ViewState["HasChanged"] = value; }
}

ASP.NET アプリケーションで永続的なユーザー状態を管理するための 9 つのオプション

于 2013-03-05T16:53:39.167 に答える
1

要素に初期値が入力されることでSelectedIndexChangedトリガーされると思います。<select>これは、フォームが初期化されている間、ユーザーがフォームを操作する前に、dropdownlist_SelectedIndexChanged()メソッドが呼び出されることを意味します。これを確認するには、デバッガーを使用して、このメソッドがいつ実行されているかを確認します。

また、他の人が述べたように、staticメンバーはリクエスト変数を保存することをお勧めしません。ViewStateはこれにより適しています。

アップデート

要素に初期値が入力されることでSelectedIndexChangedトリガーされると思います。<select>

本当じゃない。

非常に単純な Web アプリでこれをテストしましたが、宣言ファイル (MyPage.aspx) を介してSelectedIndexChanged初期値が追加されているときにイベントが発生しません。DropDownList

SelectedIndexコードビハインドでプログラムで変更しようとさえしました。

protected void Page_Load(object sender, EventArgs e)
{
    myDropDownList.Items.Add(new ListItem("Text", "Value"));
    myDropDownList.SelectedIndex = 2;
}

それでも、これを行う場合でもmyDropDownList_SelectedIndexChanged、Web ページを操作して選択したアイテムを変更するまで、イベントは発生しません。

于 2013-03-05T16:54:45.760 に答える