NeedCareHtml += dt_NeedCare.Rows[i]["SI_Name"].ToString() + ":" + 
                        "<input type=\"text\" runat=\"server\" style=\"width:50px\" maxlength=\"32\" id=\"" + 
                        "needcare_" + dt_NeedCare.Rows[i]["SI_VALUE"].ToString() +"\""+
                         " name=needcare_" + dt_NeedCare.Rows[i]["SI_VALUE"].ToString() + "\"/>" + "人、";
这个是小弟动态生成 html文件的代码,然后用<%=NeedCareHtml %>把html文件绑定到前台显示,  现在的问题是 如何在.cs文件里面获得 这个动态生成的html input的值???
 我用了:this.FindControl(id的值)、Request[name值];都不能获得?
 强烈期待高手给与指点、

解决方案 »

  1.   

    不行的话  你就用js获取  然后$.post()到后台去吧  
      

  2.   

    你是在什么地方用了:this.FindControl(id的值)、Request[name值]的呢?帖出来看看 
      

  3.   

    不可以这样添加服务器控件。
    解决方法:1、用Js获取后通过Ajax传递
    2、通过后台new TextBox()的方法添加,保存TextBox的ID,通过TextBox所在容器来FindControl(TextBox的ID)来获取
      

  4.   

    asp.net只是工作在web服务器上。你在浏览器端写了一个字符串,asp.net不可能认识它是什么TextBox控件。
      

  5.   

    你这个添加的是html控件,后台是找不到的
      

  6.   


    没错 可是我生成的就是 html啊 现在的问题就是怎样获得 生成的html 控件的value值
      

  7.   

    在后天添加TextBox控件,并且给它附上id,比如:HtmlTableRow tr = new HtmlTableRow();
    HtmlTableCell myCell = new HtmlTableCell();
    TextBox myBox = new TextBox();
    myBox.Width = 150;
    myBox.ID = "txt_"+ rowId.Trim();  //rowid指的是行号,这样可以避免id值重复
    myCell.Controls.Add(myBox);点击按钮的事件方法里写入如下代码,就可以获取到TextBox的值:
    TextBox myDataBox = (TextBox)tbData.Rows[i].Cells[1].FindControl(String.Format("txt_{0}", i.ToString()));  //tbData指的是动态增加的表格  i指的是行号
      

  8.   

    谢谢各位了  我已经解决了 在这里跟大家分享一下把:
    NeedCareHtml += dt_NeedCare.Rows[i]["SI_Name"].ToString() + ":" +  
      "<input type=\"text\" runat=\"server\" style=\"width:50px\" maxlength=\"32\" id=\"" +  
      "needcare_" + dt_NeedCare.Rows[i]["SI_VALUE"].ToString() +"\""+
      " name=needcare_" + dt_NeedCare.Rows[i]["SI_VALUE"].ToString() + "\"/>" + "人、";
    这样写是没有错的 不知道大家注意到没有 这个地方name=needcare_"   name属性少了一个"双引号 所以在用Request的时候是找不到的 改正之后就可以正确的获得text的值了
     谢谢大家了!!!
      

  9.   

    给你一个完站的例子
    <%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          String[] name = { "A", "B", "C" };
          String NeedCareHtml = "";
          for (int i = 0; i < name.Length; i++)
          {
            NeedCareHtml += name[i] + ":" + "<input type=\"text\" style=\"width:50px\" maxlength=\"32\" name='needcare" + i.ToString() + "'/>" + "人、";
          }
          Literal1.Text = NeedCareHtml + "<input type=hidden name=count value='" + name.Length + "'>";
        }
      }  protected void Button1_Click(object sender, EventArgs e)
      {
        int count = Convert.ToInt32(Request.Form["count"]);
        for (int i = 0; i < count; i++)
        {
          Response.Write("<li>输入的值:needcare_" + i + " = " + Request.Form["needcare" + i]);
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:Literal ID="Literal1" runat="server"></asp:Literal>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到" />
      </form>
    </body>
    </html>
      

  10.   

    客户端控件生成 runat=\"server\"  没有任何用处
      

  11.   

     <script language="javascript" type="text/javascript">
        var count=0;
        function AddTextBox()
        {        
            var div=document.getElementById('div');
            div.insertAdjacentHTML("beforeEnd","<input type='text' id='txt"+count+"' name='txt"+count+"' /><br>");
            count++;
        }
        function SetValue()
        {
            document.getElementById('<%=hidCount.ClientID %>').value=count;       
        }
        </script>
    public partial class TextBox : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                hidCount.Value = "0";
            }       
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            List<string> l = new List<string>();
            int count = 0;
            int.TryParse(hidCount.Value, out count);
            for (int i = 0; i < count; i++)
            {
                l.Add(string.IsNullOrEmpty(Request.Form["txt" + i.ToString()]) ? null : Request.Form["txt" + i.ToString()]);
            }
            StringBuilder sb = new StringBuilder();
            sb.Append("<script>document.getElementById('div').innerHTML=\"");
            for (int i = 0; i < l.Count; i++)
            {
                sb.Append("<input type='text' id='txt" + i + "' name='txt" + i + "' value='" + (l[i] == null ? "" : l[i]) + "' /><br>");
            }
            sb.Append("\";count=" + hidCount.Value + ";</script>");
            ClientScript.RegisterStartupScript(GetType(), "AddTextBox", sb.ToString());
        }
    }
      

  12.   

    呵呵,对于直接拼html方式,不但功能比较少,而且也还要非常仔细。你的“name=”后边显然缺乏"号,从输出的html不能看出来?!
      

  13.   

    呵呵,这种写法还真不多见,可维护性极差建议还是在后台用new一个webcontrol来实现吧
      

  14.   

    隐藏域或给text一个id 
    取值
    document.get..(隐藏域).value
    this.id