You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中如何获取动态创建HTML控件的值?

动态生成HTML文本框的取值方案

这个问题我之前做项目时刚好碰到过,核心原因是你用StringBuilder生成的是纯HTML客户端控件(没有runat="server"),ASP.NET的服务器控件机制不会自动维护它们的状态和值,所以得直接从HTTP请求的表单数据里提取。下面给你具体的实现步骤:

第一步:生成textarea时必须指定唯一的name属性

浏览器提交表单时,是通过控件的name属性来传递值的,所以动态生成每个textarea时,一定要给它设置有规律的name(比如带索引后缀),方便后续批量获取。

示例代码(Page_Load事件):

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        StringBuilder sb = new StringBuilder();
        // 假设我们要生成3个textarea,数量也可以从数据库/配置里动态获取
        int txtTotal = 3;
        // 把数量存到ViewState,方便回发时知道要遍历多少个
        ViewState["TxtTotalCount"] = txtTotal;

        for (int i = 0; i < txtTotal; i++)
        {
            // 给每个textarea设置唯一的name,比如dynamicTxt_0、dynamicTxt_1
            sb.Append($"<textarea name='dynamicTxt_{i}' rows='3' cols='50' placeholder='请输入内容'></textarea><br/>");
        }
        // 把生成的HTML赋值给服务器端div
        myDiv.InnerHtml = sb.ToString();
    }
    // 注意:如果需要回发后保持页面上的textarea显示,这里可以去掉!IsPostBack判断,让每次回发都重新生成HTML
}

第二步:在Save按钮点击事件中获取值

我们可以通过Request.Form集合,根据之前设置的name来提取对应的值,有两种常用方式:

方式1:已知数量时,按索引遍历获取

protected void btnSave_Click(object sender, EventArgs e)
{
    int txtTotal = (int)ViewState["TxtTotalCount"];
    for (int i = 0; i < txtTotal; i++)
    {
        // 根据name从Request.Form中取值
        string txtValue = Request.Form[$"dynamicTxt_{i}"];
        // 这里可以添加你的业务逻辑,比如保存到数据库
        Response.Write($"第{i+1}个文本框的值:{txtValue}<br/>");
    }
}

方式2:数量不确定时,遍历所有表单键匹配获取

如果textarea的数量是完全动态的(比如用户可以前端新增),可以遍历Request.Form的所有键,匹配我们的命名规则来取值:

protected void btnSave_Click(object sender, EventArgs e)
{
    foreach (string key in Request.Form.AllKeys)
    {
        // 匹配我们设置的name前缀
        if (key.StartsWith("dynamicTxt_"))
        {
            string txtValue = Request.Form[key];
            Response.Write($"{key}的值:{txtValue}<br/>");
        }
    }
}

关键注意点

  • 一定要给textarea设置name属性:没有name的控件,浏览器不会把它的值提交到服务器,Request.Form里也找不到。
  • 不要用id代替name:表单提交是基于name的,id只是给前端JS/CSS定位用的,和服务器取值无关。
  • 回发时的页面显示:如果需要回发后保持textarea的内容显示,记得在Page_Load里去掉!IsPostBack判断,让每次页面加载都重新生成HTML(或者前端用JS保留值,不过服务器端重新生成更稳妥)。

内容的提问来源于stack exchange,提问作者Santosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:45