我在数据绑定 FormView 中有一个 TabContainer(按类别显示信息,例如:客户生物数据、健康历史记录、财务详细信息...)。 formView 的更新和插入不起作用(将 NULL 值发布到数据库) - 我猜 FormView 无法在选项卡容器的选项卡面板中找到文本框。
一些论坛说这是因为 TabContainer 的“INamingContainer”实现(通过设计)造成的,而 hack 就是控制 TabContainer
源代码(ajax ctl工具包的源代码)并从中删除“INamingContainer”接口...对我来说太复杂了..我有点迷失了。
那么有没有一种直接且更好的方法来解决这个问题呢?我很惊讶地发现该工具包未能实现这一基本功能,因为对于大多数开发人员来说,使用 formview 订购信息(选项卡控件)是一种常见的需求。
提前致谢,
吉外
回答我自己的帖子...我从 asp.net 论坛得到了一些很棒的内部信息,并决定在这里发布解决方案:重现帮助我的解释:
希望这能为可能遇到同样问题的其他用户解决一些问题。
Best,
JY
块引用
嗨,JY,
简而言之,当编译 Bind 语句时,为插入/更新提取值存在一些限制。如果 FormView 中的控件位于另一个命名容器中(TabContainer 和 TabPanel 都是命名容器),则编译器无法解析如何从 TextBox 中提取值。我在我的博客上对此进行了更详细的讨论:http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx.
为了解决这个问题,您需要手动提取值,例如:
protected void FormView1_ItemUpdating(对象发送者,FormViewUpdateEventArgs e)
{
// 获取控件的引用
TextBox LastNameTextBox= FormView1.FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LastNameTextBox") as TextBox;
// Set update parameters in datasource
ObjectDataSource1.UpdateParameters["LastName"].DefaultValue = LastNameTextBox.Text;
}
由于 FindControl 仅搜索当前命名容器,因此您需要深入研究每个命名容器(FormView、TabContainer 和 TabPanel)才能找到 TextBox。
希望有帮助。
Aaron
块引用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)