0

こんにちは。さまざまな例を見てかなり混乱した後、説明が必要だと思います。

Facebookのログインページに表示されるような、3つのドロップダウンボックスを備えたカスタム日付コントロールを作成している最中です。

クライアント側の機能に関してコントロールは正常に機能していますが、サーバー側で値を取得しようとしたときに問題が発生しました。

JavaScriptを介してドロップダウンにデータを入力しているので、サーバー側に移動すると、選択した値を完全に認識していないように見えます。

読んだ後、子コントロールをOnInit関数に移動することにしました。これで、JavaScriptを介してドロップダウンリストにデータを入力するための起動スクリプトを登録するための呼び出しを行います。

それ以来、サーバー側にも値を追加するためにこれを変更する必要がありました。これまでのところ、このように見えます。

  protected override void OnInit(EventArgs e)
    {

        /* create controls and add some JavaScript stuff here*/

        /*Problem below*/

        if (!Page.IsPostBack)
        {
            /* These seemably have to be here inspite the fact we can populate with java, issue: on postback selected values are lost. */
            for (int i = 1; i <= 31; i++)
            {
                ddlDay.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 1; i <= 12; i++)
            {
                ddlMonth.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 1901; i <= 2012; i++)
            {
                ddlYear.Items.Add(new ListItem(i.ToString()));
            }
        }

        ScriptManager.RegisterStartupScript(this, Page.GetType(), Guid.NewGuid().ToString(), "<script type='text/javascript'>DateControlRender(document.getElementById('" + this.ClientID + "'));</script>", false);

        base.OnInit(e);
    }

とにかく私はこれを回避することができますか?私の主な懸念は、これによりページサイズが大幅に増加することです。

前もって感謝します。

よろしくお願いします

デイブ

4

2 に答える 2

0

ddlsこれがカスタムコントロールの場合、動的に作成されると思います。この場合、「initイベント」で作成する必要があることを忘れないでください。そうでない場合は、機能しviewstateません

于 2012-08-01T15:29:38.103 に答える
0

結論...ドロップダウンにjavascriptを入力して、ASP.NETパイプラインでコントロールの構造を再作成してSelectedItem/SelectedValueを作成することはできません。ASP.NETパイプラインがユーザーによって選択された値をキャプチャしてコントロールに割り当てることができるようにするには、Initフェーズの終わりまでにコントロールを作成してデータを設定する必要があります。選択はそのフェーズの後に適用されますが、コントロールとその値は、クライアントに送信されたときと同じように存在する必要があります。

したがって、いくつかのオプションがあります...コントロールを完全にサーバー側で作成し、JavaScriptを破棄します。または、JavaScriptを使用して、Form変数から値を取得することもできます。コントロールはASP.NETページの一部ではありませんが、フォーム変数内のクライアントからのすべてのHTML入力要素の投稿された値にアクセスできます。

于 2012-08-01T17:17:33.710 に答える