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

Posted

技术标签:

【中文标题】表单帖子不包含文本框数据 [ASP.NET C#]【英文标题】:Form post doesn't contain textbox data [ASP.NET C#] 【发布时间】:2010-09-06 14:00:47 【问题描述】:

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

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

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

这里会发生什么? 正如我所提到的,其他文本框可以正常接收用户提供的值,而这个有问题的特殊文本框没有与之关联的任何逻辑——它只是获取值并保存它。 此文本框与其他文本框的主要区别在于,这是一个多行框(用于输入注释),我相信它呈现为 html“textarea”标签,而不是 ASP.NET 中的“input”标签。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

这一直发生在我身上。

protected void Page_Load(object sender, EventArgs e)

    if (!Page.IsPostBack)
    
        // populate text boxes from database
    

【讨论】:

【参考方案3】:

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

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

听起来您在保存数据时没有问题(因为您说您已经设法让控件读取 正确 数据)。因此,我会说问题在您的数据绑定代码中加载。

【讨论】:

【参考方案4】:

记住页面生命周期的顺序,以及在哪里对表单进行数据绑定。

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

如果您在 Control Event 处理程序中读取值,但在 Init 或 Load 中进行数据绑定,您将获得旧值。

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

【讨论】:

【参考方案5】:

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

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

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

谢谢大家的回复!

【讨论】:

以上是关于表单帖子不包含文本框数据 [ASP.NET C#]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 对话框 + ASP.NET 文本框 + 焦点

在 C# ASP.net 中将文本框内容转换为 DateTime 格式时出错

asp.net 微信企业号办公系统-表单设计-文本框

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期

如何从列表视图中获取数据作为字符串 C# asp.net

ASP.NET点击页面内容出现文本框