1

これは機能しますが、それを行う適切な方法ですか???

[input] ボックスがあるカスタム サーバー コントロールがあります。ASP.NET TextBox を少し模倣したいのですが、完全ではありません。テキストボックスがレンダリングされると、ユーザーが値を選択してその入力ボックスに配置できるJavaScriptがあります。

コントロールにパブリック テキスト プロパティがあります。get/set では、コントロールのビューステートを取得/設定します - その部分は簡単ですが、JavaScript を介してコントロールにデータが入力されると、Text get は実際には呼び出されません。JavaScript を使用してこの公開されたプロパティを設定する適切な方法は何ですか? (または、ユーザーがボックスに入力するだけでも)?

編集: OnInit では、フォームの値に到達することで状態が維持されるようにします。

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (HttpContext.Current.Request.Form["MyInputBoxValue"] != "")
        {
            ViewState["MyInputBoxValue"] 
               = HttpContext.Current.Request.Form["MyInputBoxValue"];
        }
    }

次に、値を実際に HtmlTextWrite に戻すには、次のようにします。

protected override void RenderContents(HtmlTextWriter output)
{

        // There is an input control here and i set its value property
        // like this using the Text internal defined.
        output.Write("<input value=" + Text + ">.....

}

ありがとう

4

3 に答える 3

1

IStateManager を使用するのが最も効果的です。

例えば:

partial class MyControl : System.Web.UI.UserControl, IStateManager
{
    [Serializable()]
    protected struct MyControlState
    {
        public bool someValue;
        public string name;
    }

    protected MyControlState state;

    public bool someValue {
        get { return state.someValue; }
        set { state.someValue = value; }
    }

    public bool IsTrackingViewState {
        get { return true; }
    }

    protected override void LoadViewState(object state)
    {
        if ((state != null) && state is MyControlState) {
            this.state = state;
        }
    }

    protected override object SaveViewState()
    {
        return state;
    }

    protected override void TrackViewState()
    {
        base.TrackViewState();
    }
}

getDefaultState() は、いくつかの適切なデフォルトを新しい状態構造体にロードするだけです。状態はページのビューステートで追跡され、ASP がそれを出し入れします。

(上記のコードは VB から移植され、チェックされていません。うまくいけば、エラーは発生しませんでしたが、とにかく要点を理解する必要があります)

于 2008-10-21T02:35:28.210 に答える
0

うーん、既存のASP.NET永続性を使用できるかどうか疑問に思います...最も基本的なポストバック状態の永続化制御から継承してみてください(私はasp:hiddenを考えています)。次に、レンダリングをオーバーライドして、必要なすべてのジャズを追加します。

それが機能するかどうか教えてください、そうすれば私はテストする必要はありません:)

于 2009-03-05T19:26:00.550 に答える
0

ポストバック時に状態を維持する必要がある場合は、クライアント側でユーザーがコントロールに対して行ったことを記録する独自の方法を提供し、後でサーバー上でサーバー コントロールを変更して更新するか、クライアント上で変更をやり直す必要があります。ページが更新されたときの側面。

于 2008-10-21T01:22:49.403 に答える