表单帖子不包含文本框数据[ASP.NET C#]

时间:2008-08-22 17:40:24

标签: c# asp.net

我在表单上有几个“ASP:TextBox”控件(大约20个) 加载表单时,将从数据库中填充文本框 用户可以更改填充的值,当他们提交表单时,我将发布到服务器的值并有条件地保存它们(由某些业务逻辑确定)。
除了1个文本框之外的所有文本框都按预期工作。

在回发时,奇数框输出不包含用户在框中输入的更新值 在调试应用程序时,很明显myTextBox.Text反映了旧的预填充值,而不是新的用户提供的值。
每隔一个框都会正确显示各自的用户提供的值。

我确实找到了解决方法 我的解决方案是基本上从Request.Form对象中提取文本框的值:Request.Form[myTextBox.UniqueID],它包含用户提供的值。

可能会发生什么,这里? 正如我所提到的,其他文本框接收用户提供的值就好了,这个特殊问题的文本框没有任何与之关联的逻辑 - 只需要取值并保存它。
这个文本框和其他文本框之间的主要区别在于这是一个多行框(用于输入注释),我认为它在ASP.NET中呈现为HTML“textarea”标记而不是“输入”标记。 / p>

5 个答案:

答案 0 :(得分:8)

您是否最初仅在!Page.IsPostBack时加载数据?此外,是否为文本框启用了视图状态?

答案 1 :(得分:6)

这种情况一直发生在我身上。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // populate text boxes from database
    }
}

答案 2 :(得分:2)

我会秒Jonathan's response我会检查你的数据绑定设置。

如果您不需要ViewState用于文本框(即在表单提交之前不会发生回发),那么您应该禁用它。

听起来你没有在保存数据方面遇到问题(因为你说你已经设法让控件读回正确的数据)。因此,我会说你的数据绑定代码会加载问题。

答案 3 :(得分:1)

记住页面生命周期的顺序,以及数据绑定表单的位置。

  • PreInit
  • 初始化
  • 加载
  • 您的控制事件处理程序

如果您正在读取控件事件处理程序中的值,但在Init或Load中进行数据绑定,则您将获得旧值。

诀窍是始终在正确的事件中数据绑定,或检查回发,然后不进行数据绑定。

答案 4 :(得分:1)

  

您是否最初仅在!Page.IsPostBack时加载数据?此外,是否为文本框启用了视图状态?

我几乎忘了检查ViewState,但最后记得在SO上发帖之前验证它没有被禁用。我甚至设置EnableViewState =“true”以确保。

我确实找到了解决方案,这与大多数答案一致。表单确实不止一次加载其数据(这是故意行为)。我为这个领域实现了一些特殊的代码,一切都很好。

感谢您的回复,全部!