ASP.NET代码后台如何获取DataList控件内嵌文本框的用户输入值
核心原因
你遇到的TextBox取值为空的核心原因是页面回发时重新绑定了DataList,覆盖了用户的输入内容:点击全局提交按钮会触发页面回发,如果你在Page_Load事件中没有判断首次加载状态就执行DataList绑定逻辑,会重新渲染所有控件,用户输入的TextBox内容会被重置为空,而Label因为绑定逻辑会重新赋值,所以可以正常读到值。
解决步骤
- 第一步:调整
Page_Load中的DataList绑定逻辑,仅首次加载页面时执行绑定操作
protected void Page_Load(object sender, EventArgs e) { // 仅非回发状态(首次加载)时绑定DataList if (!IsPostBack) { // 你的原有DataList绑定代码放在此处,例如: // yourDataList.DataSource = 数据源; // yourDataList.DataBind(); } }
- 第二步:在全局提交按钮的点击事件中,遍历DataList所有项批量读取输入值
protected void 全局提交按钮ID_Click(object sender, EventArgs e) { // 遍历DataList的每一项 foreach (DataListItem item in 你的DataList控件ID.Items) { // 读取当前项的文本框输入值 string sItem = ((TextBox)item.FindControl("tbItemNo")).Text; // 读取当前项的Label值 string sFile = ((Label)item.FindControl("lblArtFile")).Text; // 此处添加你的业务处理逻辑,例如将值存入集合、写入数据库等 } }
异常排查点
如果按上述操作后仍然取不到值,检查以下配置:
- 确认DataList控件的
EnableViewState属性未被手动设置为false,该属性默认值为true,关闭后会导致控件状态无法在回发时保留 - 确认
FindControl方法中传入的TextBox、Label的ID,和aspx页面上声明的控件ID完全一致,大小写、拼写均匹配 - 若页面存在其他会触发DataList重新绑定的逻辑,也需要补充
IsPostBack判断避免重复绑定
内容的提问来源于stack exchange,提问作者Jamesckel
相关产品推荐
相关产品推荐

