加载表单后,将从数据库中填充文本框。
用户可以更改填充的值,当他们提交表单时,我将值发布到服务器并有条件地保存它们(由某些业务逻辑确定)。
除1个文本框"/>

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

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

Form post doesn't contain textbox data [ASP.NET C#]

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

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

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

这是怎么回事?
正如我提到的,其他文本框可以很好地接收用户提供的值,并且这个特殊的有问题的文本框没有任何关联的逻辑,它只接受值并将其保存。
此文本框与其他文本框之间的主要区别在于,这是一个多行框(用于输入注释),我相信它会显示为HTML" textarea"标记,而不是ASP.NET中的" input"标记。铅>


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


这总是在我身上发生。

1
2
3
4
5
6
7
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // populate text boxes from database
    }
}

我将第二次乔纳森的回答,我将检查您的数据绑定设置。

如果您不需要文本框的ViewState(即在提交表单之前不会发回邮件),则应将其禁用。

听起来您在保存数据方面没有问题(因为您说过已经设法使控件读取回正确的数据)。因此,我想说这个问题会加载到您的数据绑定代码中。


Are you initially loading the data only when !Page.IsPostBack? Also, is view state enabled for the text box?

我几乎忘了检查ViewState,但最终在记住我之前在发布SO之前记得确认它没有被禁用。我什至设置EnableViewState = " true "来确保。

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

非常感谢您的答复!


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

  • 预初始化
  • 在里面
  • 加载
  • 您的控制事件处理程序

如果您正在读取Control Event处理程序中的值,但仍在Init或Load中进行数据绑定,那么您将拥有旧值。

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


推荐阅读