0

私は ASP.NET が初めてで、少し迷っており、正しいアプローチをしているかどうかわかりません。

非常に大きなフォームで、多くの入力フィールドを持ついくつかのテーブルをレンダリングしています。

aspx で私はこれを持っています:

<tbody runat="server" id="a2_tbody" ></tbody>

コード ビハインドでは、tbody にアクセスし、tr、td、および入力を次のようなメソッドでレンダリングします。

    private void generateA2TableRows(int num_rows, HtmlGenericControl parent) { 

    for(int i=0; i<num_rows; i++){
        string ctrlName = String.Empty;
        TableRow tr = new TableRow();

        TableCell c_designacao = new TableCell();
        HtmlInputText i_designacao = new HtmlInputText("text");
        ctrlName = "a2_designacao_" + i;
        i_designacao.ID = ctrlName;
        i_designacao.Name = ctrlName;
        i_designacao.Attributes.Add("class", "validate[custom[blackList]]");
        c_designacao.Controls.Add(i_designacao);
        tr.Controls.Add(c_designacao);

        TableCell c_ss = new TableCell();
        HtmlSelect seg_social = new HtmlSelect();
        ctrlName = "a2_seg_social_" + i;
        seg_social.Items.Insert(0, "Selecione");
        seg_social.SelectedIndex = 0;
        seg_social.Items.Insert(1,"Sim");
        seg_social.Items.Insert(2,"Não");
        seg_social.ID = ctrlName;
        seg_social.Name = ctrlName;
        c_ss.Controls.Add(seg_social);
        tr.Controls.Add(c_ss);            

        TableCell c_n_utentes = new TableCell();
        HtmlInputText i_n_utentes = new HtmlInputText("text");
        i_n_utentes.Attributes.Add("class", "validate[custom[onlyPositiveNumbers]]");
        ctrlName = "a2_n_utentes_" + i;
        i_n_utentes.ID = ctrlName;
        i_n_utentes.Name = ctrlName;
        c_n_utentes.Controls.Add(i_n_utentes);
        tr.Controls.Add(c_n_utentes);

        parent.Controls.Add(tr);
    }

}

しかし今、検証やその他の処理のためにすべての入力にアクセスする必要があります。私はこの方法を試してきました:

これは、私が aspx に書いた htmlControls のみを返します。

 foreach (Control ctrl in Form.Controls) {
        if (ctrl is HtmlControl)
        {
            HtmlControl htmlCtrl = ctrl as HtmlControl;

            Response.Write("ID: " + htmlCtrl.ID + "             CLASS = " + htmlCtrl.Attributes["class"] +"         type = "+ htmlCtrl.GetType() + "<br/>");
        }
    }

このようにして、レンダリングされた要素を取得しますが、名前のみです。要素の ID を再構築して FindControl メソッドを使用しようとしましたが、「フォーム」はそのように要素を返しません。

        foreach (Object formObj in Request.Form) {
        string formObjID = formObj.ToString().Replace("$", "_");
        Control ctrl = Form.FindControl(formObjID);

    }

誰かが私をこの問題から解き放つことができますか? 主な目的は、レンダリングされた要素にアクセスして、それらを検証し、データを XML にシリアル化できるようにすることですが、これが正しいアプローチであるかどうかはわかりません。

前もって感謝します。

4

1 に答える 1

0

Hi the approach will be to regenerate all the controls for each request in that way you can access each control. Can create all the controls in the OnInit event.

于 2011-02-28T08:51:24.360 に答える