首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回发后在代码后台访问生成的htmlControls

回发后在代码后台访问生成的htmlControls
EN

Stack Overflow用户
提问于 2011-02-28 06:57:31
回答 1查看 522关注 0票数 0

我是ASP.NET的新手,我有点迷茫,不知道我是否在正确的方法上。

在一个非常大的表单中,我呈现了几个带有大量输入字段的表。

在aspx中,我有以下代码:

代码语言:javascript
复制
<tbody runat="server" id="a2_tbody" ></tbody>

在代码隐藏中,我访问tbody并使用如下方法呈现tr、td和输入:

代码语言:javascript
复制
    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。

代码语言:javascript
复制
 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方法,但是"Form“没有以这种方式返回任何元素。

代码语言:javascript
复制
        foreach (Object formObj in Request.Form) {
        string formObjID = formObj.ToString().Replace("$", "_");
        Control ctrl = Form.FindControl(formObjID);

    }

有人能把我从这件事中解脱出来吗?主要目标实际上只是访问呈现的元素,这样我就可以验证它们并将数据序列化为XML,但我真的不知道这是不是正确的方法。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-02-28 16:51:24

在方法中,将为每个请求重新生成所有控件,这样您就可以访问每个控件。可以创建OnInit事件中的所有控件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5136660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档