0

TextBoxとポストバックボタンがあります。

<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged1"     EnableViewState="false"></asp:TextBox><span></span>
<asp:Button ID="Button1" runat="server" Text="Button" />

したがって、EnableViewStateがtrueの場合に発生するように、テキストが変更された場合にのみTextChangedイベントを発生させる必要があります(皮肉なことに)。イベントのサブスクライブを解除したり、他の場所でサブスクライブしたり、ViewStateを有効にしたりすることはできません。HiddenFieldのTextBoxからテキストを保存して、変更されているかどうかを確認しようとしました。これがコードです

 protected void Page_Load(object sender, EventArgs e) {
    if (HiddenField1.Value != TextBox1.Text) {
        HiddenField1.Value = TextBox1.Text;
        TextBox1.Text = HiddenField1.Value;
    }           
}

しかし、テキストが変更されていない場合、およびイベントを発生させない場合はどうすればよいかわかりません。

4

1 に答える 1

1

問題は、ViewStateが無効になっているときにTextBoxから値を保存することでした。Page_LoadでHiddenFieldから値を取得できるため、HiddenFieldに保存することはお勧めできませんが、TextBoxinitで取得する必要があります。ただし、TextBoxをSession変数に保存すると、この問題は解消されます。コードは次のとおりです。

protected void TextBox1_TextChanged1(object sender, EventArgs e) {
    Session["text"] = TextBox1.Text;
}
protected void TextBox1_Init(object sender, EventArgs e) {
    if(Session["text"]!=null)TextBox1.Text = Session["text"].ToString();
}

textchangedイベントのセッション変数に値を保存し、textboxinitに復元します。比較はフレームワークレベルで実行されます。

于 2013-01-28T16:01:03.377 に答える