后台获取前台控件

时间:2022-12-09 16:19:33
前台页面中有如下代码:
<div id="showDetail" runat="server"></div>
在后台页面中,给div添加InnerHtml,语句如下,其中变量“strForm ”中包含了很多控件。
this.showDetail.InnerHtml = "<form id='myForm' action='' method='post'>" + strForm + "</form>";
生成完之后,页面代码如下:
<div id="ContentPlaceHolder_showDetail"><form id='myForm' action='' method='post'><div class="myFormCss"><div><label for='user_code'>卡号:</label><input type='text' class='textbox' style='width:100px;' id='user_code' name='user_code'/></div><div><label for='user_name'>姓名:</label><input type='text' class='textbox' style='width:150px;' id='user_name' name='user_name'/></div><div><label for='company_code'>公司编号:</label><select class='textbox' style='width:150px;' id='company_code' name='company_code'><option value='0'>-----请选择-----</option></select></div><div><label for='dept_code'>部门编号:</label><select class='textbox' style='width:150px;' id='dept_code' name='dept_code'><option value='0'>-----请选择-----</option></select></div><div><label for='level_code'>职位编号:</label><select class='textbox' style='width:150px;' id='level_code' name='level_code'><option value='0'>-----请选择-----</option></select></div><div><label for='group_code'>权限编号:</label><select class='textbox' style='width:150px;' id='group_code' name='group_code'><option value='0'>-----请选择-----</option></select></div><div><label for='email'>邮箱:</label><input type='text' class='textbox' style='width:300px;' id='email' name='email'/></div></div></form></div>

现在我想在后台页面中获取div里面的各个控件,然后对其进行操作,比如我想获取控件company_code,应该如何实现?
我用了FindControl方法,可是查询出来竟然是null,而且div里的控件数却只有一个,不知道什么原因,获取语句如下:
DropDownList ddlCompany = showDetail.FindControl("company_code") as DropDownList;
int c = showDetail.Controls.Count;//控件数为0

求解答,谢谢,在线等候!

15 个解决方案

#1


貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action=''  runat='server' method='post'>" + strForm + "</form>";

#2


控件怎么加的?

#3


引用 1 楼 taomanman 的回复:
貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action='' runat='server' method='post'>" + strForm + "</form>";


是哦,少了ruant="server"后台是调不到的

#4


引用 1 楼 taomanman 的回复:
貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action='' runat='server' method='post'>" + strForm + "</form>";


加上了也不管用。

#5


引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

#6


以讹传讹

#7


引用 5 楼 lhnlyy520 的回复:
引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

后台代码怎么写的

#8


IDataReader dr = SqlHelper.ExecuteReader(Common.sql_tablecolumns(strTableName, "Form"));
            while (dr.Read())
            {
                strForm = strForm + "<div>";
                strForm = strForm + "<label for='" + dr[0].ToString() + "'>" + dr[1].ToString() + ":</label>";
                string strStyle = "style='width:" + dr[2].ToString() + "px;'";
                if (dr[3].ToString() == "DATETIME")
                {
                    strForm = strForm + "<input type='text' class='textbox date_input' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "' value='" + strToday + "'/>";
                }
                else
                {
                    if (dr[4].ToString() == "TEXTBOX")
                    {
                        if (dr[0].ToString().ToLower() == "user_id")
                        {
                            strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "' value='" + UserID + "'/>";
                        }
                        else
                        {
                            strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "'/>";
                        }
                    }
                    else
                    {
                        strForm = strForm + "<select runat=\"server\" class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "'>";
                        strForm = strForm + "<option value='0'>" + WFUtility.ResourceCenter.Resource.GetResourceString("MESSAGE_6") + "</option>";
                        if (dr[7].ToString() == "LIST")
                        {
                            string[] listitems = dr[5].ToString().Split(',');
                            foreach (string listitem in listitems)
                            {
                                strForm = strForm + "<option value='" + listitem + "'>" + listitem + "</option>";
                            }
                        }
                        else
                        {
                            string[] listitems = dr[5].ToString().Split('|');
                            if (listitems.Length >= 3)
                            {
                                DataTable dt = WFDDL.Application.ApplicationResult.GetTableDetail(listitems[0]);
                                for (int i = 0; i < dt.Rows.Count; i++)
                                {
                                    DataRow anRow = dt.Rows[i];
                                    string strText = "";
                                    string strValue = anRow[listitems[2]].ToString();
                                    string[] listTextNames = listitems[1].Split(',');
                                    foreach (string anTextName in listTextNames)
                                    {
                                        if (!string.IsNullOrEmpty(strText))
                                            strText += "(";
                                        strText += anRow[anTextName].ToString();
                                        if (strText.IndexOf("(") != -1)
                                            strText += ")";
                                    }
                                    if (dr[0].ToString() == "user_id" && strValue == UserID)
                                        strForm = strForm + "<option value='" + strValue + "' selected>" + strText + "</option>";
                                    else
                                        strForm = strForm + "<option value='" + strValue + "'>" + strText + "</option>";
                                }
                            }
                        }
                        strForm = strForm + "</select>";
                        //strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString() + "' name='" + dr[0].ToString() + "'/>";
                    }
                }
                strForm = strForm + "</div>";
            }

       strForm = "<div class=\"myFormCss\">" + strForm + "</div>";
        this.showDetail.InnerHtml = "<form id='myForm' runat=\"server\" action='' method='post'>" + strForm + "</form>";

#9


引用 7 楼 sandy945 的回复:
引用 5 楼 lhnlyy520 的回复:
引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

后台代码怎么写的


代码如上面

#10


看到了,你说下你想做什么事吧

#11


加上 runat="server" 就行了

#12


引用 10 楼 sandy945 的回复:
看到了,你说下你想做什么事吧


我不明白你什么意思?你要是说我这方法不行,那你可以给出好的建议啊。
因为页面所要呈现的内容是不固定的,用户会对要呈现的内容做个基础信息维护,然后读取他所设置的基础信息呈现到页面上。所以不能在前台用控件写死,只能在后台根据维护进去的信息一个个增加控件。现在已可以实现这个添加控件的功能。

控件都添加完后,我现在需要在后台获取控件,对控件进行操作。

#13


你现在的方法不是不行,而是它有适用范围。 我不知道你具体要做什么,自然没办法说它行不行。

你不告诉我需求,我怎么告诉你方案。

直接说需求就行

#14


引用 13 楼 sandy945 的回复:
你现在的方法不是不行,而是它有适用范围。 我不知道你具体要做什么,自然没办法说它行不行。

你不告诉我需求,我怎么告诉你方案。

直接说需求就行


我就是想通过像下面的方法一样,获取出控件啊,然后操作控件。
DropDownList ddlCompany = showDetail.FindControl("company_code") as DropDownList;

#15


那这样就是不行的。

你现在的写法只能获取控件的选择值

通过Request.Form["ControlName"] 这种方式

#1


貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action=''  runat='server' method='post'>" + strForm + "</form>";

#2


控件怎么加的?

#3


引用 1 楼 taomanman 的回复:
貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action='' runat='server' method='post'>" + strForm + "</form>";


是哦,少了ruant="server"后台是调不到的

#4


引用 1 楼 taomanman 的回复:
貌似你少了红色的部分了吧??

this.showDetail.InnerHtml = "<form id='myForm' action='' runat='server' method='post'>" + strForm + "</form>";


加上了也不管用。

#5


引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

#6


以讹传讹

#7


引用 5 楼 lhnlyy520 的回复:
引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

后台代码怎么写的

#8


IDataReader dr = SqlHelper.ExecuteReader(Common.sql_tablecolumns(strTableName, "Form"));
            while (dr.Read())
            {
                strForm = strForm + "<div>";
                strForm = strForm + "<label for='" + dr[0].ToString() + "'>" + dr[1].ToString() + ":</label>";
                string strStyle = "style='width:" + dr[2].ToString() + "px;'";
                if (dr[3].ToString() == "DATETIME")
                {
                    strForm = strForm + "<input type='text' class='textbox date_input' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "' value='" + strToday + "'/>";
                }
                else
                {
                    if (dr[4].ToString() == "TEXTBOX")
                    {
                        if (dr[0].ToString().ToLower() == "user_id")
                        {
                            strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "' value='" + UserID + "'/>";
                        }
                        else
                        {
                            strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "'/>";
                        }
                    }
                    else
                    {
                        strForm = strForm + "<select runat=\"server\" class='textbox' " + strStyle + " id='" + dr[0].ToString().ToLower() + "' name='" + dr[0].ToString() + "'>";
                        strForm = strForm + "<option value='0'>" + WFUtility.ResourceCenter.Resource.GetResourceString("MESSAGE_6") + "</option>";
                        if (dr[7].ToString() == "LIST")
                        {
                            string[] listitems = dr[5].ToString().Split(',');
                            foreach (string listitem in listitems)
                            {
                                strForm = strForm + "<option value='" + listitem + "'>" + listitem + "</option>";
                            }
                        }
                        else
                        {
                            string[] listitems = dr[5].ToString().Split('|');
                            if (listitems.Length >= 3)
                            {
                                DataTable dt = WFDDL.Application.ApplicationResult.GetTableDetail(listitems[0]);
                                for (int i = 0; i < dt.Rows.Count; i++)
                                {
                                    DataRow anRow = dt.Rows[i];
                                    string strText = "";
                                    string strValue = anRow[listitems[2]].ToString();
                                    string[] listTextNames = listitems[1].Split(',');
                                    foreach (string anTextName in listTextNames)
                                    {
                                        if (!string.IsNullOrEmpty(strText))
                                            strText += "(";
                                        strText += anRow[anTextName].ToString();
                                        if (strText.IndexOf("(") != -1)
                                            strText += ")";
                                    }
                                    if (dr[0].ToString() == "user_id" && strValue == UserID)
                                        strForm = strForm + "<option value='" + strValue + "' selected>" + strText + "</option>";
                                    else
                                        strForm = strForm + "<option value='" + strValue + "'>" + strText + "</option>";
                                }
                            }
                        }
                        strForm = strForm + "</select>";
                        //strForm = strForm + "<input type='text' class='textbox' " + strStyle + " id='" + dr[0].ToString() + "' name='" + dr[0].ToString() + "'/>";
                    }
                }
                strForm = strForm + "</div>";
            }

       strForm = "<div class=\"myFormCss\">" + strForm + "</div>";
        this.showDetail.InnerHtml = "<form id='myForm' runat=\"server\" action='' method='post'>" + strForm + "</form>";

#9


引用 7 楼 sandy945 的回复:
引用 5 楼 lhnlyy520 的回复:
引用 2 楼 sandy945 的回复:
控件怎么加的?


后台写代码加的。因为页面里的所有控件是可以由客户自定义的,所以都采用了动态生成的方法。

后台代码怎么写的


代码如上面

#10


看到了,你说下你想做什么事吧

#11


加上 runat="server" 就行了

#12


引用 10 楼 sandy945 的回复:
看到了,你说下你想做什么事吧


我不明白你什么意思?你要是说我这方法不行,那你可以给出好的建议啊。
因为页面所要呈现的内容是不固定的,用户会对要呈现的内容做个基础信息维护,然后读取他所设置的基础信息呈现到页面上。所以不能在前台用控件写死,只能在后台根据维护进去的信息一个个增加控件。现在已可以实现这个添加控件的功能。

控件都添加完后,我现在需要在后台获取控件,对控件进行操作。

#13


你现在的方法不是不行,而是它有适用范围。 我不知道你具体要做什么,自然没办法说它行不行。

你不告诉我需求,我怎么告诉你方案。

直接说需求就行

#14


引用 13 楼 sandy945 的回复:
你现在的方法不是不行,而是它有适用范围。 我不知道你具体要做什么,自然没办法说它行不行。

你不告诉我需求,我怎么告诉你方案。

直接说需求就行


我就是想通过像下面的方法一样,获取出控件啊,然后操作控件。
DropDownList ddlCompany = showDetail.FindControl("company_code") as DropDownList;

#15


那这样就是不行的。

你现在的写法只能获取控件的选择值

通过Request.Form["ControlName"] 这种方式