質問

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

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

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

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

    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 + ">.....

}

ありがとう

役に立ちましたか?

解決

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から移植されており、チェックされていません。うまくいけばエラーは発生しませんでしたが、とにかくポイントを取得できるはずです)

他のヒント

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

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

動作するかどうかを教えてください。テストする必要はありません:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top